将固定长度的字符串作为C中的输入

时间:2017-07-22 09:21:42

标签: c string scanf

我正在尝试在C中输入一个字符串并打印它。我的示例代码如下:

#include<stdio.h>
main()
{
    char a[5];
    scanf("%[^\n]a",a);
    printf("%s",a);

}

问题是,我最初假设字符串长度为5.但是如果我采用长度大于5的字符串,它可以正常工作。为什么会这样?允许的字符串长度是否应小于5?

1 个答案:

答案 0 :(得分:2)

  

为什么会这样?

未定义的行为未定义。

  

允许的字符串长度是否应小于5?

允许由谁?您传递给scanf()(隐式)a的第一个元素的地址。您需要明确告诉它可以扫描多少。

同样a扫描浮动。要扫描“字符串”,请使用s

如果您定义了一个允许长度为5-1 = 4的可能“字符串”的char[5]。 C需要1 char来存储“字符串”0 - 终结符。

告诉scanf()仅扫描4 char使用%4s