这可能是常见问题之一,但到目前为止我看到的所有解决方案都无效。 我想动态分配二维数组的字符。我从.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);
二维chars数组的内存分配:
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;
}
答案 0 :(得分:2)
如果发生崩溃,我怀疑问题是:
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以获得不是您想要的整数值。解决这个问题。
答案 1 :(得分:0)
感谢您输入的人 - array [i] [j]需要更改为array [j] [i],然后才能正常工作。