Поскольку target[1]
является указателем на "bbbbbbbbbb"
, и вам не разрешено изменять строковые константы.Это неопределенное поведение.
Это ничем не отличается от:
char *x = "bbb";
x[0] = 'a';
Я думаю, вы можете спутать его с:
char x[] = "bbb";
x[0] = 'a';
, который является действительным, поскольку он создает массив, который вам разрешено изменять.Но вот что дает вам:
char* target[2] = {"cccc","bbbbbbbbbb"};
- это массив указателей, каждый из которых указывает на неизменяемую память.
Если вы попытаетесь:
char t0[] = "cccc";
char t1[] = "bbbbbbbbbb";
char* target[2] = {t0, t1};
strcpy(target[1],src);
вы обнаружите, что он работает, поскольку target[1]
теперь указывает на t1
, который можно изменять.