簡體   English   中英

從文本文件中逐個字符讀取多行時出現分段錯誤

[英]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之后。

感謝任何幫助,至於為什么在最后一行發生此錯誤?

編輯

  1. fscanf行中將ch更改為&ch

  2. ch[0]更改為chif語句)

  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++;

您還需要用\\0 char 終止num以與atoi一起使用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM