gpt4 book ai didi

c - 将字符加载到动态分配的二维数组中

转载 作者:行者123 更新时间:2023-12-04 22:53:54 24 4
gpt4 key购买 nike

这可能是常见问题之一,但到目前为止我看到的所有解决方案都不起作用。我想动态分配二维字符数组。我从 .txt 文件中获取这些字符。我什至设置了行数 (int r) 和列数 (int s)。分配本身正在工作,但每当我尝试将文件中的字符加载到此数组中时,它就会崩溃。不知道为什么。

文件是这样排序的:

代码如下:

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

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

打开所需的文件:

    FILE* file;
file = fopen(argv[1], "r");
if (file == NULL) {
printf("Error occurred when loading the file, program quits now.");
return 1;
} else {
printf("File loaded successfully.");
}

获取有关列数和行数的信息(r 是行,s 是列):

    int r,s,i,j;
char arrayInfo[6];
fgets (arrayInfo, 6, file);
char* comma = strchr(arrayInfo, ',');
s = atoi(comma - 1)+1;
r = atoi(comma + 1);

二维字符数组的内存分配:

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

不工作 从文件加载字符然后打印它们。此代码适用于“char array [r][s];”而不是动态分配。

    for (j=0;j<r;j++) {
for (i=0;i<s;i++) {
array[i][j] = fgetc (file);
}
}

for (j=0;j<r;j++) {
for (i=0;i<s;i++) {
printf ("%c",array[i][j]);
}
}
return 0;
}

最佳答案

如果发生崩溃,我怀疑问题出在:

array[i] = malloc(s * sizeof(char));

请先确认 malloc() 是否成功,稍后尝试写入分配的内存。

a[i][j] i 是您的行,j 是您的列。我们在您的代码中看到它已互换。

我不知道你的文件是什么样子,但请重新检查下面的评估

s = atoi(comma - 1)+1; /* comma is a pointer and you are decrementing it by 1? */

, 正在 strchr 中使用,随后指针递减 1 以获得不是您想要的整数值。也解决这个问题。

关于c - 将字符加载到动态分配的二维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511444/

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