c - 为什么这个数组不报错?

标签 c arrays char

<分区>

我有一个程序,我预计它会崩溃,但它没有。能否请您告诉我原因。

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/

相关文章:

c - 该代码如何工作(以英文显示数字)?一步步

iphone - 读取以单斜杠或双斜杠开头的文件路径的区别

c - 在 C 中使用指针与数组

php - 分层 php 函数执行错误!这是什么?

javascript - 获取请求后的空数组(AngularJS)

c - int x = 时间(NULL); => 段错误?

javascript - 使用 JavaScript 从数组中删除对象

C 中的字符数组

c++ - 未初始化的局部变量使用 C++

c - 如何使用指针仅指向数组的一半