用C打印2D字符数组



我有一个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

没有任何警告或编译错误。我想我的问题可能是我试图打印出一个内存地址而不是实际的字符,或者我的malloc没有做我期望它做的事情。

这是我用C编写的第一个程序,到目前为止,这种语言让我感到最不舒服。

这就是我为words array

分配内存的方式
words = (char**) malloc(sizeof(char*)*NUMWORDS);

然后用从文件输入中得到的单词填充它。我在获取输入时对每个单词进行malloc,将每个单词存储在单词数组地址中,然后删除n。我把每个单词都打印出来,所以它可以工作。

为单词分配内存

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

你所做的是为每个单词指针分配内存,但没有分配字符所在的地址。你可以用loop

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]!=''; 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");
}

相关内容

  • 没有找到相关文章

最新更新