c - 动态创建字符串数组出错

标签 c arrays malloc

我正在尝试从文件中读取字符串并将它们插入到矩阵中。每一行都是一个词。

FILE *fp = fopen("zadanie4.txt","r");

if( fp == NULL)
{
  perror("Error while opening the file.\n");
  exit(EXIT_FAILURE);
}


int symbol, num_of_lines = 0, len_of_string = 0, max_len = 0;
do {
    symbol = fgetc(fp);
    len_of_string++;
    if (symbol == '\n' || feof(fp)) {
        num_of_lines++;

        if(len_of_string > max_len){
            max_len = len_of_string;
        }
        len_of_string = 0;
    }
} while (symbol != EOF);
fclose(fp);

printf("Number of words: %d\n", num_of_lines);
printf("Longest word: %d\n", max_len);

fp = fopen("zadanie4.txt","r");
char (*arr)[num_of_lines] = calloc(num_of_lines, sizeof(char*) * max_len); 
int index = 0;

while(fscanf(fp, "%s", arr[index++]) == 1) {  
    printf("%s\n", arr[index - 1]); //first check to see what is written into array
}
close(fp);

printf("--------------------------\n");

int i;
for(i = 0; i < num_of_lines; i++){
    printf("%s\n", arr[i]); //second check
}

我找出最长字符串的大小,并为字符串数 * 最长字符串分配内存。

以下是最长单词为 5 时的输出(+1 表示空“\0”):

Number of words: 6
Longest word: 6
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
FFFFF
--------------------------
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
FFFFF

如果我向每一行添加另一个字符:

Number of words: 6
Longest word: 7
AAAAAa
BBBBBb
CCCCCc
DDDDDd
EEEEEe
FFFFFf
--------------------------
AAAAAaBBBBBbCCCCCcDDDDDdEEEEEeFFFFFf
BBBBBbCCCCCcDDDDDdEEEEEeFFFFFf
CCCCCcDDDDDdEEEEEeFFFFFf
DDDDDdEEEEEeFFFFFf
EEEEEeFFFFFf
FFFFFf

注意:本例中每个字符串的大小相同,但我希望它适用于各种大小。

有人可以帮助我如何正确地为该数组分配内存吗?

最佳答案

您对 arr 的声明和分配是错误的且不匹配。

您将 arr 声明为指向 num_of_lines 字符数组的指针。然后分配 max_len 个指向字符的指针。

您可以对外部和内部数组使用可变长度数组:

char arr[num_of_lines][max_len + 1];  // +1 for string terminator

根本不需要动态分配。

关于c - 动态创建字符串数组出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33480205/

相关文章:

c - 确定恰好具有 4 个节点的子树数量的最佳方法是什么?

c - c程序中链接的隐藏例程

java - 链表数组

c - 分配给字符串数组的内存量?

c - 应该在哪里定义像 HAVE_SYS_UIO_H 这样的宏?

c - 使用 char 到 int 数据类型

arrays - jq - 将对象列表转换为汇总对象

c - 尝试乘以 2 个矩阵时出现段错误 11

c - malloc 在循环中崩溃,但在循环外正常

c编程,创建存储指针的动态数组,struc