C语言 逐字符从文本文件中读取多行时出现分段错误



我正在尝试从文件中读取行,一次一个字符。

输入示例:

5 2
2
1 3
2 4 5
3

假设我正在尝试读取第一行,然后我首先读取"5",然后读取空格 (''(,然后读取"2",然后尝试将两个数字存储在一个数组中,我使用realloc声明,因为我不知道在读取该行之前一行中会有多少个数字。 我只知道文件中将存在的行数numNodes.

我正在尝试将数字存储在 2D 数组中,其中每行将具有不同的净长度。 由于我事先不知道每行的长度,所以我在读取每个数字后使用realloc分配内存。

由于数字可以超过一位数,我将字符存储在num字符数组中,当我遇到空格(' '(或换行符(''(时,我使用atoi将其转换为数字,并将其存储在合适的行中,在使用realloc为其分配内存后。

这是我的代码

FILE *fp;
fp = fopen("input.txt","r");
char ch;
int numNodes = 5, i = 0;
int **adjList = (int **)malloc(numNodes*sizeof(int *));
int len = 0,j,k=0;
char num[4];
for(i=0;i<numNodes;i++)
{
adjList[i] = NULL;
printf("Node %d -> ",i+1);
do
{
//read = 
fscanf(fp,"%c",&ch);
if(ch!=' ' && ch!='n')
{
num[k]=ch;
k++;
}
else
{
k = 0;
len++;
adjList[i] = (int *)realloc(adjList[i],sizeof(int)*len);
adjList[i][len-1] = atoi(num);
for(k=0;k<4;k++)
num[k]='0';
}
}
while(ch!='n');
for(j=0;j<len;j++)
printf("%d ",adjList[i][j]);
printf("n");
len = 0;
}

但是,我在最后一行Segmentation Fault (core dumped),即打印2 4 5之后。

任何帮助,如是,为什么此错误发生在最后一行?

编辑

  1. ch更改为fscanf行中的&ch

  2. ch[0]更改为ch(if语句(

  3. 在循环do...while之前添加了adjlist[i] = NULL

fscanf(fp,"%c",&ch);
if(ch!=' ' && ch!='n')
{
num[k]=ch;
k++;
}
else
{
k = 0;
len++;
adjList[i] = (int *)realloc(adjList[i],sizeof(int)*len);
adjList[i][len-1] = atoi(num);
for(k=0;k<4;k++)
num[k]='0';
}

当你读完一个数字时,k将被4

for(k=0;k<4;k++)
num[k]='0';

然后你开始用k >= 4读取下一个数字,从而越界访问num

num[k]=ch;
k++;

您还需要使用字符终止num以与atoi一起使用。

num[k] = '';
adjList[i][len-1] = atoi(num);

相关内容

  • 没有找到相关文章

最新更新