scanf没有';t放入终止的空字节

scanf没有';t放入终止的空字节,c,scanf,C,Scanf,我正在使用scanf函数从stdin读取字符串 char inputWord[100]; scanf("%99[^\n]", inputWord); 除了输入序列中的第一个字符是换行符(通过按回车键输入)的情况外,此操作正常。当我使用strlen打印inputWord的长度时,它打印6(始终),当我打印inputWord字符串本身时,它打印一些垃圾man第页(共scanf页)指出,在输入序列中的字符与排除字符集(此处为[^\n]的第一次匹配后,会添加一个终止的空字节。为什么在这种情况下不添加空

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

char inputWord[100];
scanf("%99[^\n]", inputWord);
除了输入序列中的第一个字符是换行符(通过按
回车键
输入)的情况外,此操作正常。当我使用
strlen
打印inputWord的长度时,它打印6(始终),当我打印
inputWord
字符串本身时,它打印一些垃圾
man
第页(共
scanf
页)指出,在输入序列中的字符与排除字符集(此处为
[^\n]
的第一次匹配后,会添加一个终止的空字节。为什么在这种情况下不添加空字节?是因为在这种情况下,
scanf
无法匹配任何字符(返回值为零)


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

在这种情况下,来自
scanf()
的返回代码将为0,因为它与转换规范的任何内容都不匹配(并且由于与转换规范的任何内容都不匹配,因此不会将任何符号写入相应的变量)。

更改它:
scanf(“%99[^\n]”,inputWord)
(在格式字符串中的
%
之前添加了一个空格),虽然您应该使用
fgets()
@GrijeshChauhan,但格式字符串
%99[^\n]“
不会忽略前导或尾随空格(本例中的换行除外),我不想忽略它们。除了换行符,我想阅读所有内容。你可以在回答中添加一点,他必须将数组初始化为0:
char-inputWord[100]={0}
,所以每次运行代码时将strlen(inputWord)设为6纯属运气吗?@ajay:是的,这是由于堆栈变量
inputWord
的垃圾值初始化。可能是几小时后的下一次,如果您再次执行代码,您可以获得
1000