编辑一个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";