我正在尝试在C中输入一个字符串并打印它。我的示例代码如下:
#include<stdio.h>
main()
{
char a[5];
scanf("%[^\n]a",a);
printf("%s",a);
}
问题是,我最初假设字符串长度为5.但是如果我采用长度大于5的字符串,它可以正常工作。为什么会这样?允许的字符串长度是否应小于5?
答案 0 :(得分:2)
为什么会这样?
“未定义的行为未定义。”
允许的字符串长度是否应小于5?
允许由谁?您传递给scanf()
(隐式)a
的第一个元素的地址。您需要明确告诉它可以扫描多少。
同样a
扫描浮动。要扫描“字符串”,请使用s
。
如果您定义了一个允许长度为5-1 = 4的可能“字符串”的char[5]
。 C需要1 char
来存储“字符串”0
- 终结符。
告诉scanf()
仅扫描4 char
使用%4s
。