#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'。因此,它将无法将任何字符赋值给任何元素。但是,数组的行为就像一个动态分配的数组,允许分配任意数量的字符。上面的代码产生以下输出。C字符数组(C字符串)动态?
sss after 3 chars added: how
sss after strcpy: n
sss after strcat: n stuff
我以为C是严格的数组分配,并期望它抛出“数组大小超出范围”的错误。为什么/这是怎么发生的?
请参阅:http://stackoverflow.com/questions/15646973/how-dangerous-is-it-to-access-an-array-out-of-bounds –
'“数组大小超出范围”错误“你从哪里得到这个想法,甚至是C中的一件事? – John3136
sss只是一个指针。和sss [X]相当于*(sss + X) –