我开始学习中C.输入字符串在下面的源代码我得到长度5.使用scanf的输入字符串()
#include<stdio.h>
int main(void)
{
char s1[5];
printf("enter text:\n");
scanf("%s",s1);
printf("\n%s\n",s1);
return 0;
}
的字符数组当输入为:
1234567891234567
,我检查了它的工作正常多达16个元素(我不明白,因为它超过5个元素)。12345678912345678
,它给我一个错误segmentation fault: 11
(我给在这种情况下,17种元素)123456789123456789
,错误被Illegal instruction: 4
(我给在这种情况下,18种元素)
我不明白为什么有不同的错误。这是C中的scanf()
或字符数组的行为。我正在阅读的这本书对这些事情没有一个明确的解释。仅供参考我不了解指针。任何进一步的解释都会很有帮助。
的行为*不确定*当输入的长度超过4个字符。 *未定义的行为*并不意味着“必须立即崩溃”,这意味着语言没有义务做任何特别的事情。 – EOF
但是当输入超过5个字符时它不应该给我一个错误? – yash
@buggenerator:这不是违反约束条件,编译器没有义务发出诊断消息,也没有要求在运行时引发错误。 – EOF