<分区>
我有一个程序,我预计它会崩溃,但它没有。能否请您告诉我原因。
char a[5];
strncpy(a,"abcdefg",7);
a[7] = '\0';
printf("%s\n",a);
程序不应该在 strncpy()
或 a[7]='\0'
处崩溃,它大于 5< 的数组大小
。我得到的输出为 abcedefg
。我正在使用 gcc 编译器。
<分区>
我有一个程序,我预计它会崩溃,但它没有。能否请您告诉我原因。
char a[5];
strncpy(a,"abcdefg",7);
a[7] = '\0';
printf("%s\n",a);
程序不应该在 strncpy()
或 a[7]='\0'
处崩溃,它大于 5< 的数组大小
。我得到的输出为 abcedefg
。我正在使用 gcc 编译器。
最佳答案
数组的大小是五个 char a[5];
并且您在第 7 个位置分配,即 buffer overrun您的代码的问题和行为在运行时未定义。
strncpy(a,"abcdefg",7);
a[7] = '\0';
两者都是错误的,你需要像这样定义数组:
#defined size 9 // greater then > 7
char a[size];
注意 "abcdefg"
需要一个额外的 8 个字符作为 \0
空字符。
阅读:a string ends with a null character, literally a '\0' character
关于c - 为什么这个数组不报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941905/