2014-11-21 73 views
0

如何修改(增加ASCII值)在char *的二维数组中的每个字符?修改char *数组[x] [y]

我有现在这样的代码:

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 
     } 
    } 
} 

当我运行它,它出现segfaults与注释的行。


我试试这个,但仍...分割falult

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; 
} 
+0

您是否尝试过调试代码以查看代码中发生了什么? – 2014-11-21 23:11:36

+0

不,bcs我没有任何IDE,只有记事本+终端 – Wulpo 2014-11-21 23:13:41

+0

您是否试图增加'x'指向的每个字符串中的每个字母,或者只是每个字符串的第一个字母? – brycem 2014-11-21 23:15:17

回答

6
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()

我注意到你已经编辑了你的帖子,在同一个问题中包含另一个尝试,这次使用动态分配的数组而不是静态数组。但是你仍然没有为实际的字符串分配任何内存,只是一个指针数组。我的答案应该在版本的代码中保持不变。