C文件I / O中的分段故障11

时间:2014-07-27 20:10:11

标签: c

我正在编写一个搜索格式如下的文本文件的函数:

#用户1 \通过\
#用户2 \通过\
#用户3 \通\

我写了函数Check_User:

int Check_User(char input[20], FILE *userlist)
{
    int c, i;
    fseek(userlist, 0, SEEK_SET);
    while(1)
    {
        while((c = fgetc(userlist)) != '#')
        {
            if(c == EOF)
                return 1;
        }
        while(input[i] == (c = fgetc(userlist)))
        {
            i++;
        }
        i = 0;
        if(c == '\\')
            return 0;
    }
}

从这里调用:

while(Check_User(username, userlist) == 0)
{
    printf("Username already in use. Please select another:");
    Get_Input(username);
}

检查用户是否检查* userlist指向的文件,以查看用户名[20]是否包含已在使用的用户名。如果它已在使用中,则调用Get_Input以获取新用户名。

程序使它一直到while循环,然后给我一个分段错误:11。我读过这通常源于试图超出数组的末尾,或者通常做内存你不要无法访问。 Userlist.txt已在r +模式下打开。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您的变量i在首次使用之前未初始化。在C中,声明的变量不会初始化为数字0(因为它们将在C#或Java中),而只是使用之前存在于其内存位置的值。因此,i的值可能远远大于字符串input的长度,而input[i]可能会访问无效的内存位置。

作为旁注:要在Linux下自己快速调试,使用调试符号(gcc -g)编译程序,然后使用valgrind --tool=memcheck <your program>让valgrind为您找到错误的来源。