C语言中用scanf("%3s")输入单个字符时,数组未赋值元素的状态疑问
问题解答
针对你给出的代码和疑问,明确几点:
scanf("%3s", str)的具体行为%3s会读取最多3个非空白字符,并且会自动在读取到的字符序列末尾添加一个'\0'作为字符串终止符。- 当仅输入单个字符时,比如输入
'x',scanf会把该字符存入str[0],然后将'\0'存入str[1],而str[2]不会被scanf进行任何修改。
关于
str[2]的内容与未定义行为str[2]的内容属于未定义行为:因为你定义的是局部数组char str[3];,没有显式初始化,它的初始值是栈上的随机垃圾数据。你测试时看到它是'\0'只是巧合——栈上该位置刚好是这个值,换编译器、运行环境或代码上下文,这个值都可能变化,C标准完全不保证它的内容。- 不存在“未赋值的剩余元素自动填充为
'\0'”的规则,scanf只会处理它需要存储的字符和终止符,未用到的数组元素不会被主动修改。
内容的提问来源于stack exchange,提问作者FN-2187
相关产品推荐
相关产品推荐

