scanf不会放置终止空字节

时间:2014-01-30 08:06:22

标签: c scanf

我正在使用stdin函数从scanf读取字符串。

char inputWord[100];
scanf("%99[^\n]", inputWord);

除了输入序列中的第一个字符是换行符(通过按enter key输入)的情况外,此方法正常工作。当我使用strlen打印inputWord的长度时,它打印6(总是),当我打印inputWord字符串本身时,它会打印一些垃圾。 manscanf表示在输入序列中的字符与排除字符集[^\n]的第一个匹配之后添加终止空字节。为什么在这种情况下不添加空字节?是因为scanf在这种情况下无法匹配任何字符(返回值为零)?

我知道我应该使用fgets,但我很想知道scanf在这种情况下的行为。似乎scanf是函数的一个野兽。

1 个答案:

答案 0 :(得分:3)

在这种情况下,来自scanf()的返回码将为0,因为它与转换规范的任何内容都不匹配(因为转换规范没有匹配,nothign会写入相应的变量)。