我正在尝试使用fgets()获取一个字符的输入。据我所知,除非没有空间,否则fgets会将\ n加到输入的末尾。
char test[1];
fgets(test,1,stdin);
readRestOfLine();
while (strcmp(test,"z") != 0){
......
......
}
无论如何,即使输入z,循环也不会运行。这是为什么?
答案 0 :(得分:1)
man fgets
char *fgets(char *s, int size, FILE *stream);
fgets()从 stream 中读取最多一个 size 字符并且 将它们存储到 s 指向的缓冲区中... 终止空字节(' \ 0')存储在最后一个字符之后 缓冲区。
在 size 1的情况下,这意味着 fgets()读入零,i。即不,字符和存储终止' \ 0'在test[0]
。
答案 1 :(得分:0)
strcmp
按字母顺序对字符串进行操作,因此test
必须是\0
终止字符串。 test
必须有\0
的空间。
答案 2 :(得分:0)
正如您所说的fgets
在字符串的末尾附加'\ n'。因此,如果只输入“z”,那么结果字符串将是“z \ n”,它不等于“z”。
此外,fgets
的缓冲区大小仅在程序中有字符长,但此长度必须至少与您打算输入的最长字符串一样长。
试试这个:
char test[100]; // space for 98 characters + \n + terminating zéro
fgets(test, 100, stdin);
readRestOfLine();
while (strcmp(test,"z\n") != 0){
......
......
}