在 C 中从 CSV 文件(图形邻接列表)输入整数

Input integers from CSV file( graph adjacency list) in C

我正在尝试实施 BFS 算法以确定两个 nodes.For 之间的最短路径,我已将图形作为输入 csv 文件提供,这是邻接 list.I 计划存储此列表作为结构“rel”的数组并从 code.However 中显示的文件获取输入,输出未显示正确的值。

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

typedef struct relation // to store the pair of integers in a csv file line (c connected to y
{
    int x;
    int y;
}rel; // relation

void split(char* buffer,char* string1,char* string2) // spilts buffer into two strings seperated by ,
{
    char* buffer_trav = buffer; // trav ptr in buffer
    char* string_trav = string1; // trav ptr to string 1 or 2(after ',' is read)
    while(*buffer_trav!='[=10=]')
    {
        if(*buffer_trav==',')
        {
            string_trav = string2;
            buffer_trav+=1;
            
        }
        else
        {
            *string_trav = *buffer_trav;
            string_trav+=1;
            buffer_trav+=1;
                
        }
    }
}


int main(void)
{
    FILE* fp = fopen("graph.csv","r"); // reading csv file 
    
    int max_number_data  = 100; // maximum number of edge relations in the file
    rel graph[max_number_data];

    for(int i=0;i<max_number_data;i++)
    {
        graph[i].x=1 ;
        graph[i].y=-1 ;     // setting initial value to be used as a check point for other functions
    }

    char buffer[10];//buffer for input
    char x_buffer[5];// buffer for name
    char y_buffer[5]; // buffer for password

    int count=0;
    while(fgets(buffer,10,fp)!=NULL)                                                                
    {
        char* ptr; // to be used to convert string to integer;
        split(buffer,x_buffer,y_buffer); // splits into two strings

        printf("%s : %s;\n",x_buffer,y_buffer);  // To debug

        graph[count].x = (int)strtol(x_buffer,&ptr,10); // converts string to longint which is later cat into int
        graph[count].y = (int)strtol(y_buffer,&ptr,10); //  " " " " " " " " " " " " "" " " " " "" " "" "" " " "" 
        count++;                                


    }
    fclose(fp);

} 

输入文件:

0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,10
0,11
0,12
0,13
0,17
0,19
0,21
0,31
1,0
1,2
1,3
1,7
1,13
1,17
1,19
1,21
1,30
2,0
2,1
2,3
2,7
2,8
2,9
2,13
2,27
2,28
2,32
3,0
3,1
3,2
3,7
3,12
3,13
4,0
4,6
4,10
5,0
5,6
5,10
5,16
6,0
6,4
6,5
6,16
7,0
7,1
7,2
7,3
8,0
8,2
8,30
8,32
8,33
9,2
9,33
10,0
10,4
10,5
11,0
12,0
12,3
13,0
13,1
13,2
13,3
13,33
14,32
14,33
15,32
15,33
16,5
16,6
17,0
17,1
18,32
18,33
19,0
19,1
19,33
20,32
20,33
21,0
21,1
22,32
22,33
23,25
23,27
23,29
23,32
23,33
24,25
24,27
24,31
25,23
25,24
25,31
26,29
26,33
27,2
27,23
27,24
27,33
28,2
28,31
28,33
29,23
29,26
29,32
29,33
30,1
30,8
30,32
30,33
31,0
31,24
31,25
31,28
31,32
31,33
32,2
32,8
32,14
32,15
32,18
32,20
32,22
32,23
32,29
32,30
32,31
32,33
33,8
33,9
33,13
33,14
33,15
33,18
33,19
33,20
33,22
33,23
33,26
33,27
33,28
33,29
33,30
33,31
33,32

我得到的输出(调试)是:

0`@?d : 1
;
0`@?d : 2
;
0`@?d : 3
;
0`@?d : 4
;
0`@?d : 5
;
0`@?d : 6
;
0`@?d : 7
;
0`@?d : 8
;
0`@?d : 10
;
0`@?d : 11
;
0`@?d : 12
;
0`@?d : 13
;
0`@?d : 17
;
0`@?d : 19
;
0`@?d : 21
;
0`@?d : 31
;
1`@?d : 0

;
1`@?d : 2

;
1`@?d : 3

;
1`@?d : 7

;
1`@?d : 13
;
1`@?d : 17
;
1`@?d : 19
;
1`@?d : 21
;
1`@?d : 30
;
2`@?d : 0

;
2`@?d : 1

;
2`@?d : 3

;
2`@?d : 7

;
2`@?d : 8

;
2`@?d : 9

;
2`@?d : 13
;
2`@?d : 27
;
2`@?d : 28
;
2`@?d : 32
;
3`@?d : 0

;
3`@?d : 1

;
3`@?d : 2

;
3`@?d : 7

;
3`@?d : 12
;
3`@?d : 13
;
4`@?d : 0

;
4`@?d : 6

;
4`@?d : 10
;
5`@?d : 0

;
5`@?d : 6

;
5`@?d : 10
;
5`@?d : 16
;
6`@?d : 0

;
6`@?d : 4

;
6`@?d : 5

;
6`@?d : 16
;
7`@?d : 0

;
7`@?d : 1

;
7`@?d : 2

;
7`@?d : 3

;
8`@?d : 0

;
8`@?d : 2

;
8`@?d : 30
;
8`@?d : 32
;
8`@?d : 33
;
9`@?d : 2

;
9`@?d : 33
;
10@?d : 0

;
10@?d : 4

;
10@?d : 5

;
11@?d : 0

;
12@?d : 0

;
12@?d : 3

;
13@?d : 0

;
13@?d : 1

;
13@?d : 2

;
13@?d : 3

;
13@?d : 33
;
14@?d : 32
;
14@?d : 33
;
15@?d : 32
;
15@?d : 33
;
16@?d : 5

;
16@?d : 6

;
17@?d : 0

;
17@?d : 1

;
18@?d : 32
;
18@?d : 33
;
19@?d : 0

;
19@?d : 1

;
19@?d : 33
;
20@?d : 32
;
20@?d : 33
;
21@?d : 0

;
21@?d : 1

;
22@?d : 32
;
22@?d : 33
;
23@?d : 25
;
23@?d : 27
;
23@?d : 29
;
23@?d : 32
;
23@?d : 33
;
24@?d : 25
;
24@?d : 27
;
24@?d : 31
;
25@?d : 23
;
25@?d : 24
;
zsh: segmentation fault  ./a.out

问题是字符串没有以 null 终止 characters.Also,出现分段错误是因为 csv 文件有大约 200 行,我将最大输入行设置为 100。