在Xcode中,我声明了一个名为myString
的字符串,内存中有5个空格。
int main() {
char myString[5];
printf("Insert a string: ");
scanf("%s", myString);
printf("Your string is %s.", myString);
return 0;
}
问题在于,每当我输入一个长度超过4个字符的单词时,控制台仍会打印出printf()
我的字符串,而不是抱怨它。
这是什么原因?
答案 0 :(得分:2)
在你的情况下,因为你已经定义myString
有5 char
s,任何运行时间超过4个字符的输入(考虑将null作为第5个终止)实际上会导致超出内存访问,产生undefined behavior。结果可以是任何东西,导致正常工作,就好像你已经分配了足够的内存。
您应该使用
限制输入 scanf("%4s", myString);
同样。
此外,作为备注,main()
的推荐签名为int main(int argc, char *argv[])
或至少为int main(void)
。
答案 1 :(得分:1)
C会愉快地破坏你提出的任何记忆。 AKA,缓冲区溢出。 : - )