我正在尝试读取文件并从该文件创建邻接列表但是当我从命令行中读取文件时出现分段错误 gcc n00889642.c ./a.out test.txt 分段错误
为什么会这样?
main(int argc, char *argv[]){
int index;
int i;
char vertex1;
char vertex2;
FILE *f = fopen(argv[1], "r");
while (fscanf(f, " %c %c", vertex1, vertex2) != EOF)
{
for(i = 0; i<26; i = i + 1)
{
if(i == vertexCount)
{
InsertVertex(vertex1);
break;
}
if(strcmp(graph[i], vertex1) == 0)
{
break;
}
}
for(i=0; i<26; i = i + 1)
{
if(i == vertexCount)
InsertVertex(vertex2);
if(strcmp(graph[i], vertex2)== 0)
break;
}
}
fclose(f);
i = 1;
while(i < vertexCount)
{
insertEdge(graph[0].vertexKey, graph[i].vertexKey);
i= i + 1;
}
f = fopen(argv[1], "r");
while(fscanf(f, " %c %c", vertex1, vertex2) != EOF)
{
if(strcmp(graph[0], vertex1) != 0)
insertEdge(vertex1, vertex2);
}
fclose(f);
printGraph();
return 0;
}
这是我的代码的主要部分
答案 0 :(得分:2)
夫妻俩:
argv [1] - 如果只传入一个参数,应该是argv [0](应该验证argc)。
fscanf(f, " %c %c", vertex1, vertex2)
scanf需要变量地址来保存值,所以应该是:
fscanf(f, " %c %c", &vertex1, &vertex2)
答案 1 :(得分:1)
fscanf
声明中有错误
while (fscanf(f, " %c %c", vertex1, vertex2) != EOF)
您应该提供目标变量的地址。检查转换的字段数也更好。
while (fscanf(f, " %c %c", &vertex1, &vertex2) == 2)
另外
if(strcmp(graph[i], vertex1) == 0)
不理会编译器警告,可能会导致seg-fault。从您的不完整代码中不清楚数据类型vertex1
和vertex2
究竟应该是什么
InsertVertex(vertex2);
char
如何成为顶点?