我有一个这样的数组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:
如果它们的元素具有适当的值,则未指定这些数组是否不同。如果程序尝试修改这样的数组,则行为未定义。
您已经使用字符串文字实现了这一点,并且无法更改它们
不要编辑内容 - 这是一个坏主意。在某些编译器中,这将是一个编译时错误,因为字符串常量是const char *
,而不是char*
.
相反,翻转指针:
gradient_xpm[1] = "jkl";