3

以下代码似乎存在段错误,我无法弄清楚原因。

#include <string.h>

static char src[] = "aaa";

int main()
{
   char* target[2] = {"cccc","bbbbbbbbbb"};
   strcpy(target[1],src);
   return 0;
}
4

1 回答 1

11

因为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]now 指向t1,这是可修改的。

于 2011-02-22T02:52:15.023 回答