gpt4 book ai didi

c - 在C中打印二维字符数组

转载 作者:行者123 更新时间:2023-11-30 17:10:56 25 4
gpt4 key购买 nike

我有一个二维字符数组

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 = (char**) malloc(sizeof(char*)*NUMWORDS);

然后我用从文件输入中获得的单词填充它。我在获取输入时为每个单词进行 malloc,将每个单词存储在单词数组地址中,然后删除\n。我打印出每个单词,所以它有效。

最佳答案

您为单词分配内存为

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 是恒定的。

关于c - 在C中打印二维字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32622410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com