在C中打印2D char数组

时间:2015-09-17 04:05:37

标签: c multidimensional-array printf

我有一个2D数组的字符

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);

然后我用文件输入中的单词填充它。当我得到输入时,我为每个单词malloc,将每个单词存储在单词数组地址,然后删除\ n。我打印出每个单词,这样就可以了。

3 个答案:

答案 0 :(得分:1)

您将单词的内存分配为

  

words =(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不变。

答案 1 :(得分:0)

根据您的信息,这可能就是您想要的

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");
}

类似的东西。

答案 2 :(得分:-1)

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