2016-11-13 2 views
0

я нашел, когда я использую функцию fgets следующим образом:программа не читает строку с определенной длиной в fgets()

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    char str[10]; 
    fgets(str, 5, stdin); 

    printf("%s", str); 
    system("PAUSE"); 

    return 0; 
} 

Если я ввод в 123456789, он будет выводить 1234. Это 4 символа - не 5, которые я определил в функции. Что происходит с пятым персонажем?

редактировать: название обновлено

+2

пятый знак - # знак. строки заканчиваются нулевым завершением на языке C – saygins

+0

@saygins извините за отказ от вашего редактирования, но в то же время у меня одновременно было значительное редактирование. и NULL (макрос препроцессора для нулевого указателя) не совпадает с NUL (нулевой символ): http://stackoverflow.com/questions/2911089/null-terminating-a-string –

+1

см. [fgets] (http: //en.cppreference.com/w/c/io/fgets) (_Читает не более ** count - 1 ** символов из данного потока файлов_) – BLUEPIXY

ответ

0

это потому, что так как C-строка завершенного нуль, fgets принимает строку терминатор (\0) в счет, так что, если вы передадите буфер с 5-обугленным, это безопасно.

В коде, вы должны сделать:

fgets(str, sizeof(str), stdin); 

str, поскольку это массив с известным размером.

Смежные вопросы