簡體   English   中英

在C中打印2D char數組

[英]Printing 2D char array in C

我有一個二維字符數組

char** words;//2D array where each slot holds a word.
char word [ MAX_WORD ]; 

我正在嘗試做一件荒謬的簡單事情。 我需要打印數組,這樣我才能正確分配內存並刪除所有換行符。

這是我想做的

//print array
int k, j;
for (k = 0; k < MAX_WORD ; k++) {
    for (j = 0; j < NUMWORDS; j++) {
        printf("%s%s", words[k],words[j]);
    }
    printf("\n");
}

這就是我得到的

����������������=�������������������=�������������������=���  
Segmentation fault: 11

我沒有任何警告或編譯錯誤。 我認為我的問題可能是我正在嘗試打印出一個內存地址而不是實際的char,或者我的malloc沒有執行我期望的操作。

這是我的第一個C語言程序,到目前為止,這種語言使我感到最不舒服。

這就是我為單詞數組分配內存的方式

words = (char**) malloc(sizeof(char*)*NUMWORDS);

然后用從文件輸入中得到的單詞填充它。 在獲取輸入時,我為每個單詞分配內存,將每個單詞存儲在單詞數組地址,然后刪除\\ n。 我將每個單詞打印出來,這樣就可以了。

您為單詞分配內存為

字=(char **)malloc(sizeof(char *)* NUMWORDS);

您要做的是為每個單詞指針分配內存,但未分配字符所在的地址。 因此,您可以循環執行此操作

for(int i=0; i<NUMWORDS; i++)
{
    words[i] = (char*)malloc(sizeof(char)*MAX_WORD);
}

您的打印段也有問題,我嘗試過的代碼可能就是您想要的。

    char **words;
    words = (char**)malloc(sizeof(char*)*NUMWORDS);
    for(int i=0; i<NUMWORDS; i++)
    {
        words[i] = (char*)malloc(sizeof(char)*MAX_WORD);
    }
    strcpy(words[0], "Hello world");
    strcpy(words[1], "Hi how are you?");
    char word[MAX_WORD];
    int k, j;
    for (k = 0; k < NUMWORDS ; k++)
    {
        for (j = 0; words[k][j]!='\0'; j++)
        {
            printf("%c", words[k][j]);
        }
        printf("\n");
    }

為了實現良好的實踐,您可以聲明二維數組,例如

 char words[NUMWORDS][MAX_WORD];

要么

char *words[NUMWORDS];

並通過循環為所有單詞分配內存。 由於您的NUMWORDSMAX_WORD是常量。

根據您的信息,可能這就是您想要的

char **words; 
char word[MAX_WORD]; // this is unnecessary
int k, j;

while (NOT_EOF) { // NOT_EOF is not c, fix this to work
    // allocate a column. remember, this might always fail.
    words[wordscount] = (char *)malloc(sizeof(char) * MAX_WORD);
    // get your word from a file
    fscanf(filestream, "%s", words[wordscount]);
    // increment wordscount 
    wordscount++;
}

// print all characters, one row each line (one string each line)
for (k = 0; k < wordscount ; k++) {
   for (j = 0; j < MAX_WORD; j++) {
      printf("%c", words[k][j]);
   }
   printf("\n");
}

這樣的事情。

//print array
int k;
for (k = 0; k < MAX_WORD ; k++) {
    printf("%s", words[k]);
    printf("\n");
}

暫無
暫無

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

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