#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/