簡體   English   中英

修改char * array [x] [y]

[英]Modify char *array[x][y]

如何修改char *二維數組中的每個char(增加ASCII值)?

我現在有以下代碼:

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()指針。

我注意到您已經編輯了帖子,以包含針對同一問題的另一次嘗試,這次使用動態分配的數組而不是靜態數組。 但是您仍然沒有為實際的字符串分配任何內存,只是分配了一個指針數組。 對於您的兩個版本的代碼,我的答案都應保持不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM