In order to use gets
safely, you have to know exactly how many characters you will be reading, so that you can make your buffer large enough. You will only know that if you know exactly what data you will be reading.
Instead of using gets
, you want to use fgets
, which has the signature
char* fgets(char *string, int length, FILE * stream);
(fgets
, if it reads an entire line, will leave the '\n'
in the string; you’ll have to deal with that.)
gets
remained an official part of the language up to the 1999 ISO C standard, but it was officially removed in the 2011 standard. Most C implementations still support it, but at least gcc issues a warning for any code that uses it.
Related Posts:
- Why do I get an assertion failure?
- Difference between scanf() and fgets()
- How to read from stdin with fgets()?
- Why I do get “Cannot find bound of current function” when I overwrite the ret address of a vulnerable program?
- Removing trailing newline character from fgets() input
- Reaching EOF with fgets
- Implementing Taylor Series for sine and cosine in C
- warning: implicit declaration of function
- pthread_join() and pthread_exit()
- Why should we typedef a struct so often in C?
- What is the difference between ++i and i++?
- Undefined reference to pthread_create in Linux
- Stack smashing detected
- Why am I getting “void value not ignored as it ought to be”?
- Pointer Arithmetic
- dereferencing pointer to incomplete type
- Openssl : error “self signed certificate in certificate chain”
- Get a substring of a char* [duplicate]
- How do I create an array of strings in C?
- How do function pointers in C work?
- Expression must be a modifiable L-value
- “Expected expression before ‘ { ‘ token”
- How to generate a random int in C?
- How do I use valgrind to find memory leaks?
- C pointers and arrays: [Warning] assignment makes pointer from integer without a cast
- What is the difference between char s[] and char *s?
- Error “initializer element is not constant” when trying to initialize variable with const
- munmap_chunk(): invalid pointer
- What is the LD_PRELOAD trick?
- What is the argument for printf that formats a long?
- Cannot assign requested address – possible causes?
- Using %s in C correctly – very basic level
- How do you make an array of structs in C?
- need help understanding the movzbl call in this function
- What is the difference between read and pread in unix?
- What does “control reaches end of non-void function” mean?
- How to create my own header file in c++?
- connect Error: “No route to host”
- warning: implicit declaration of function
- C dynamically growing array
- Returning string from C function
- Difference between int32, int, int32_t, int8 and int8_t
- Char Comparison in C
- C compile error: “Variable-sized object may not be initialized”
- What does WEXITSTATUS(status) return?
- Difference between a Structure and a Union
- Xcode – Warning: Implicit declaration of function is invalid in C99
- what is the unsigned datatype?
- lvalue required as left operand of assignment
- how to convert negative hexadecimal to decimal
- Why am I getting “undefined reference to sqrt” error even though I inclu de math.h header?
- Reading a string with scanf
- How to initialize a struct in accordance with C programming language standards
- Expression preceding parentheses?
- Linux equivalent of I_PUSH
- Understanding INADDR_ANY for socket programming
- getopt_long() — proper way to use it?
- C read file line by line
- The Definitive C Book Guide and List[
- When is it a good idea to use strdup (vs malloc / strcpy)
- C read file line by line
- Copying a part of a string (substring) in C
- expression must have integral type
- Incompatible implicit declaration of built-in function ‘malloc’
- Why is %c used in C?
- Need more information about Aborted (core dumped)
- What is Innermost loop in imperfectly nested loops?
- What’s wrong with my code? What is argv[1]?
- What can cause a “Resource temporarily unavailable” on sock send() command
- How to solve error: expected identifier or ‘(‘
- Reversing a string in C
- When a number is written as 0x00… what does the x mean
- How to remove the character at a given index from a string in C?
- waitpid, wnohang, wuntraced. How do I use these
- Split string with delimiters in C
- How to pause in C?
- (.text+0x20): undefined reference to `main’ and undefined reference to function
- Why am I getting this error: “data definition has no type or storage class”?
- I’m getting “Invalid Initializer”, what am I doing wrong?
- Writing binary number system in C code
- How to make sense of modulo in c
- Error: initializer element is not computable at load time
- Convert char array to string use C
- warning: passing argument ’from incompatible pointer type [enabled by default]’
- Return a `struct` from a function in C
- Scanning Multiple inputs from one line using scanf
- xorl %eax – Instruction set architecture in IA-32
- Which of sprintf/snprintf is more secure?
- Allocating char array using malloc
- Implementation of strtok() function
- switch case: error: case label does not reduce to an integer constant
- warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
- warning: return makes pointer from integer without a cast but returns integer as desired
- The difference between char * and char[] [duplicate]
- How to clear input buffer in C?
- What primitive data type is time_t? [duplicate]
- Usage of \b and \r in C
- Parsing command-line arguments in C
- Compiler warning – suggest parentheses around assignment used as truth value
- lvalue required as increment operand