在C中使用2个连续fgets的意外结果

时间:2018-03-22 13:41:57

标签: c fgets

int main()
{

    char firstdate[10];
    char seconddate[10];    

    printf("Enter the First Date in this format:DD/MM/YYYY\n");
    fgets(firstdate , 11 , stdin);
    printf("Check: %s\n" , firstdate);



    printf("Enter the second Date in this format:DD/MM/YYYY\n");

    fgets(seconddate , 11 , stdin);
    printf("Check: %s\n" , seconddate);


    printf("second Check: %s\n" , firstdate);
    printf("second Check: %s\n" , seconddate);

    return 0;

}

现在它是一个相当简单的程序。正如我所料,在第一次调用fgets()之后,输入存储在char数组firstdate中。但是在第二次调用fgets()之后,firstdate char数组中的值似乎已经丢失了。不知道发生了什么或为什么我得到这样的结果。你能救我吗?

结果:

Enter the First Date in this format:DD/MM/YYYY
10/01/1997
Check: 10/01/1997

Enter the second Date in this format:DD/MM/YYYY
20/04/1995
Check: 20/04/1995

second Check:
second Check: 20/04/1995

奇怪的是,尽管数组太小而无法容纳内容,但它最初能够正确保存(正如第一个输出所示)。 调用第二个fgets函数摆脱了'firstdate'变量

1 个答案:

答案 0 :(得分:2)

您的char[]太小,无法容纳您所读的内容:

char firstdate[10]; // array of 10 bytes
fgets(firstdate, 11, stdin); // read 11 bytes

并且,来自fgets()的手册页:

  

在找到换行符时,在文件结尾或错误时停止读取。保留换行符(如果有)。如果读取任何字符且没有错误,则为“\ 0'附加字符以结束字符串。

所以你应该声明大小为13的数组并读取12个字节(直到找到'\n'):

char firstdate[13];
char seconddate[13];
fgets(firstdate, 12, stdin);
fgets(seconddate, 12, stdin);