C char 数组(C 字符串)动态?

标签 c arrays

#include <stdio.h>
#include <string.h>
void main(){
    char sss[0]; //array with 0 elements
    sss[0]= 'h'; sss[1]= 'o'; sss[2]= 'w'; //how does this line compile wihtout error?
    printf("sss after 3 chars added: %s\n", sss);
    strcpy(sss, "n");
    printf("sss after strcpy: %s\n", sss);
    strcat(sss, " stuff");
    printf("sss after strcat: %s\n", sss);
}

在这里,我声明了一个大小为 0 的字符数组“sss”。因此,它无法将任何字符分配给任何元素。然而,该数组的行为类似于动态分配的数组,允许分配任意数量的字符。上面的代码产生以下输出。

sss after 3 chars added: how
sss after strcpy: n
sss after strcat: n stuff

我认为 C 对数组分配很严格,并期望它抛出“数组大小超出范围”错误。为什么/如何发生这种情况?

最佳答案

该行为未定义,因为您尚未为数组项分配内存。 尝试这个: char sss[3]; 现在您可以分配给各个数组索引,而不会出现未定义的行为。

关于C char 数组(C 字符串)动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411419/

相关文章:

c - 如何捕获输入设备并防止其默认行为

c - 运行中断/计时器 x 秒?

java - 我使用数组编译 java 彩票程序时出现 2 个错误

javascript - 如何打印数组中的唯一数字

c - 害怕只从我第一次运行程序时开始阅读

c - C中的公式P(n) = (n!)(6^n)产生了一个很大的值

c++ - 使用 openssl 检查 PKCS#7 中的根证书是否被撤销

c - 如何有效地在年历上存储任务信息

java - 令人费解的行为(Java 实例、数组和 GWT)

c - 通过引用将 2D VLA 数组传递给函数,返回分配的内存,无指针数组