[英]Segmentation Fault while reading multiple lines from a text file character-by-character
我正在嘗試從文件中讀取行,一次一個字符。
輸入示例:
5 2
2
1 3
2 4 5
3
假設我試圖讀取第一行,然后我首先讀取 '5',然后是空格 (' '),然后是 '2',然后嘗試將這兩個數字存儲在一個數組中,我聲明使用realloc
因為在閱讀一行之前我不知道一行中有多少個數字。 我只知道文件numNodes
中將出現的行數。
我試圖將數字存儲在二維數組中,其中每一行都有不同的長度。 由於我事先不知道每行的長度,因此我在讀取每個數字后使用realloc
分配內存。
由於數字可以超過一位,我將字符存儲在num
字符數組中,當我遇到空格(' ')或換行符('\\n')時,我使用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
之后。
感謝任何幫助,至於為什么在最后一行發生此錯誤?
編輯:
在fscanf
行中將ch
更改為&ch
將ch[0]
更改為ch
( if
語句)
在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++;
您還需要用\\0
char 終止num
以與atoi
一起使用。
num[k] = '\0';
adjList[i][len-1] = atoi(num);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.