编辑一个char *数组

我有一个像这样的char *数组:

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

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

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

例如:

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

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

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

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

就像是:

 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]

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

根据C99标准 ,6.4.5字符串文字6.4.5 / 6:

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

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

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

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

相反,翻转指针:

 gradient_xpm[1] = "jkl";