如何修改(增加 ASCII 值)char *
二维数组中的每个字符?
我现在有这段代码:
int riadky = 2;
int stlpce = 7;
char* x[riadky][stlpce];
int i,j;
for ( i = 0; i < riadky; i++)
for (j = 0; j < stlpce; j++)
x[i][j] = "test";
x[0][1] = "something";
for ( i = 0; i < riadky; i++){
for (j = 0; j < stlpce; j++){
printf("%s ", x[i][j]);
}
printf("\n");
}
printf("\n");
char * temp;
for ( i = 0; i < riadky; i++) {
for (j = 0; j < stlpce; j++) {
for (temp= x[i][j]; *temp; temp++) {
(*temp)++; //segmentation fault
}
}
}
当我运行它时,它在注释行出现段错误。
我试过了,但还是……段错误
char ***alloc_array(int x, int y) {
char ***a = calloc(x, sizeof(char **));
int i;
for(i = 0; i != x; i++) {
a[i] = calloc(y, sizeof(char *));
}
return a;
}
int main() {
int riadky = 3;
int stlpce = 7;
char ***x = alloc_array(riadky, stlpce);
int i,j;
for ( i = 0; i < riadky; i++){
for (j = 0; j < stlpce; j++){
strcpy(x[i][j],"asdasd");
}
}
return 0;
}
最佳答案
for ( i = 0; i < riadky; i++) for (j = 0; j < stlpce; j++) x[i][j] = "test"; x[0][1] = "something";
您正在初始化指向字符串文字的指针。允许(但不要求)编译器将字符串文字放在只读内存中。尝试修改其中之一可能会导致段错误。
您需要为您的字符串分配动态内存:
#include <stdlib.h>
...
for (...) {
for (...) {
x[i][j] = malloc (strlen (somestring)+1);
if (x[i][j]) {
strcpy (x[i][j], somestring);
} else {
/* Allocation error */
}
其中 somestring
是字符串文字或包含要存储的字符串的变量。如果您以后需要存储更大的字符串,则必须 realloc()
您的指针。不要忘记 free()
使用完指针后。
我注意到您已经编辑了您的帖子以包含针对同一问题的另一次尝试,这次使用的是动态分配的数组而不是静态数组。但是您仍然没有为实际的字符串分配任何内存,只是一个指针数组。对于您的代码的两个 版本,我的答案应该不会改变。
关于c - 修改 char *array[x][y],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27071888/