Следующий код кажется segfault, и я не могу понять, почему.
#include <string.h>
static char src[] = "aaa";
int main()
{
char* target[2] = {"cccc","bbbbbbbbbb"};
strcpy(target[1],src);
return 0;
}
Следующий код кажется segfault, и я не могу понять, почему.
#include <string.h>
static char src[] = "aaa";
int main()
{
char* target[2] = {"cccc","bbbbbbbbbb"};
strcpy(target[1],src);
return 0;
}
Потому что 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
, который можно изменить.
#include <string.h> static char src[] = "aaa"; int main() { char* target = "bbbbbbbbbb"; strcpy(target,src); return 0; }
- person confusedDespiteKnowingBetter; 22.02.2011
strcpy
? Как это будет выглядеть потом? - person Anon.   schedule 22.02.2011