c - C中的多维字符串数组

标签 c arrays string multidimensional-array malloc

我只是自己做了一些额外的工作,试图更好地掌握 C 中的多维字符串数组,例如 array[3][5]= {"apple","house","truck “}。我有一个包含许多长度不同的单词的测试文件,我想用这些不同的单词填充字符串数组。我使用动态分配来提供内存空间,打开文件,并使用 fgets 来获取每个单词,因为每个单词都在一个新行上。我将单词保存到数组中的一个新位置,然后打印它以检查它是否已保存。这些词按应有的方式打印,这让我相信它们正在被存储,但后来我遇到了段错误。谁能向我解释为什么会这样?

文本文件的示例和我的格式是(单词之间没有空行:

魔法

女巫

附魔

滥用

米奇

米切尔

斜接

缓解

缓解

缓解

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WORDS 50
#define LETTERS 15

int main(int argc, char *argv[]) {

int i;
char **array;
FILE *file1;
char string[15];

array=(char **)malloc(LETTERS*sizeof(char*));

for (i=0;i<WORDS;i++) {
    array[i]=(char *)malloc(LETTERS*sizeof(char));
}

if (argc != 2) {
    printf("\nERROR: Wrong number of arguments entered\n");
    return -1;
}

file1=fopen(argv[1],"r");

if (file1==NULL) {

    printf("\nERROR: File 1 not found\n");
    return -1;
}

for (i=0;i<=WORDS;i++) {
    fgets(string,LETTERS,file1);
    array[i][0]=*string;
    printf("%s",string);
}

return 0;

}

最佳答案

在您的示例中,您需要为每个字符串分配至少 6 个字符,否则您将删除终端空字符。

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

相关文章:

arrays - 对常量数组进行排序会改变自身

python - 关于python中字符串格式化的几个问题。结盟

python - 根据其他列的文本字符串的开头创建新的 pandas 列

c - 套接字和缓冲区

c - 如何在C中始终打印4个数字

arrays - 将散列转换为散列数组

javascript - 字符串不是函数错误?

c - ftell 位于超过 2GB 的位置

c - 如何在结构中正确使用指针数组

java 用户定义的数组(和用户定义的数组大小)返回 [null, null, null, ...]