我正在编写一个搜索格式如下的文本文件的函数:
#用户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 +模式下打开。
感谢您的帮助。
答案 0 :(得分:3)
您的变量i
在首次使用之前未初始化。在C中,声明的变量不会初始化为数字0(因为它们将在C#或Java中),而只是使用之前存在于其内存位置的值。因此,i
的值可能远远大于字符串input
的长度,而input[i]
可能会访问无效的内存位置。
作为旁注:要在Linux下自己快速调试,使用调试符号(gcc -g
)编译程序,然后使用valgrind --tool=memcheck <your program>
让valgrind为您找到错误的来源。