#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);
}
Здесь я объявил массив символов sss 'с размером 0. Таким образом, он не сможет назначить какой-либо символ каким-либо элементам. Однако массив ведет себя как динамически распределенный, позволяя присвоить любое количество символов. Вышеприведенный код дает следующий результат.C char array (C string) dynamic?
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) –