编辑一个char *数组

时间:2012-06-15 21:09:53

标签: c string char

我有一个char *数组,如下所示:

char * gradient_xpm[] = {"abc", "def", "ghi"};

我需要更改这些字符串的值。

我尝试了strcpy=运算符,但它给了我一个分段错误。

e.g:

strcpy(gradient_xpm[1],"jkl");
gradient_xpm[1][2] = 'x';

我甚至无法编辑单个字符。如何编辑这些值?

5 个答案:

答案 0 :(得分:4)

数组中有字符串常量,无法更改。这是您的段错误的原因。

您需要在不使用字符串常量的情况下设置数组,然后将字符串常量复制到数组中。

类似的东西:

char *gradient_xpm[3];

gradient_xpm[1] = (char *) malloc(sizeof(char) * (MAX_STR_LEN + 1));
strncpy(gradient_xpm, "jkl", MAX_STR_LEN);

// now this will work:
gradient_xpm[1][2] = 'x';

同样适用于gradient_xpm[0]gradient_xpm[2]

答案 1 :(得分:3)

在C中修改字符串文字是未定义的行为。所以任何事情都可能发生,不一定是段错误。

来自C99 standard,6.4.5字符串文字6.4.5 / 6:

  

未指明这些数组是否与它们不同   元素具有适当的值。如果程序试图   修改这样的数组,行为是未定义的。

答案 2 :(得分:1)

您无法修改标记为禁止的字符串常量。但是,您可以修改已在堆或堆栈上分配的内存。也就是说,如果您使用的是C ++,请考虑使用the string class数组,而不是管理char *数组。内存管理问题更容易处理。

答案 3 :(得分:0)

您已使用字符串文字实现此功能,但您无法更改它们

答案 4 :(得分:0)

不要编辑内容 - 这是一个糟糕的,不好的想法。在某些编译器中,这是一个编译时错误,因为字符串常量是const char *,而不是char*

相反,翻转指针:

gradient_xpm[1] = "jkl";