c, gets (), fgets () - PullRequest
       9

c, gets (), fgets ()

2 голосов
/ 27 января 2011
char s1[100];
char s2[100];
gets(s1);
fgets(s2,sizeof(s2),stdin);
printf("%d,%d\n",strlen(s1),strlen(s2));

после запуска я дважды ввожу "abcd" и получаю результат: 4,5 почему это так?

Ответы [ 3 ]

4 голосов
/ 27 января 2011

Со страницы руководства gets / fgets:

 The fgets() function reads at most one less than the number of characters
 specified by n from the given stream and stores them in the string s.
 Reading stops when a newline character is found, at end-of-file or error.
 The newline, if any, is retained.  If any characters are read and there
 is no error, a `\0' character is appended to end the string.

 The gets() function is equivalent to fgets() with an infinite n and a
 stream of stdin, except that the newline character (if any) is not stored
 in the string.  It is the caller's responsibility to ensure that the
 input line, if any, is sufficiently short to fit in the string.

fgets сохраняет символ новой строки, который является символом номер 5, а gets - нет.Кроме того, всегда используйте fgets, поскольку при использовании gets.

невозможно предотвратить переполнение буфера.
2 голосов
/ 27 января 2011

Потому что fgets возвращает строку с '\n' в конце, а gets нет.

0 голосов
/ 27 января 2011

Из справочной страницы gets() :

Функция gets() эквивалентна fgets() с бесконечным n и stream, равным stdin, за исключением того, что символ новой строки (если есть) не сохраняется в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...