c中命令行参数的分段错误

时间:2015-12-04 22:58:39

标签: c segmentation-fault

我正在尝试读取文件并从该文件创建邻接列表但是当我从命令行中读取文件时出现分段错误 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;
}

这是我的代码的主要部分

2 个答案:

答案 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。从您的不完整代码中不清楚数据类型vertex1vertex2究竟应该是什么

InsertVertex(vertex2);

char如何成为顶点?