为什么我在Xcode中处理字符串时没有遇到错误?

时间:2015-08-11 21:10:39

标签: c arrays

在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()我的字符串,而不是抱怨它。

这是什么原因?

2 个答案:

答案 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,缓冲区溢出。 : - )