[英]scanf doesn't put a terminating null byte
我正在使用scanf
函数从stdin
读取一个字符串。
char inputWord[100];
scanf("%99[^\n]", inputWord);
除了输入序列中的第一个字符是换行符(通过按enter key
)的情况外,这种方法很好。 当我使用strlen
打印inputWord的长度时,它打印6(总是),当我打印inputWord
字符串本身时,它会打印一些垃圾。 scanf
man
页指出在输入序列中的字符与排除字符集合的第一次匹配之后添加终止空字节,这里是[^\\n]
。 为什么在这种情况下不添加空字节? 是因为在这种情况下scanf
无法匹配任何字符(返回值为零)?
我知道我应该使用fgets
但我很想知道在这种情况下scanf
的行为。 似乎scanf
是一个函数的野兽。
在这种情况下, scanf()
的返回码将为0,因为它与转换规范的任何内容都不匹配(因为转换规范没有匹配,nothign会写入相应的变量)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.