C文件I/O中的分段错误11
我正在编写一个函数,用于搜索如下格式的文本文件: #User1\pass\C文件I/O中的分段错误11,c,C,我正在编写一个函数,用于搜索如下格式的文本文件: #User1\pass\ #用户2\pass\ #用户3\pass\ 我已经编写了函数检查\u用户: int Check_User(char input[20], FILE *userlist) { int c, i; fseek(userlist, 0, SEEK_SET); while(1) { while((c = fgetc(userlist)) != '#') {
#用户2\pass\
#用户3\pass\ 我已经编写了函数检查\u用户:
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);
}
Check user检查*userlist指向的文件,查看用户名[20]是否包含已在使用的用户名。如果它已经在使用中,它将调用Get_输入以获取新用户名
程序一直运行到while循环,然后给了我一个分段错误:11。我曾读到,这通常源于试图在数组末尾之外进行写操作,或者通常对无法访问的内存进行操作。Userlist.txt已在r+模式下打开
谢谢您的帮助。您在第一次使用变量
i
之前没有初始化它。在C语言中,声明的变量不会初始化为数字0(就像在C#或Java中那样),而是简单地使用之前存在于其内存位置的值。因此,i
的值可能远大于字符串input
的长度,并且input[i]
可能访问无效的内存位置
附带说明:要在Linux下自己快速调试,请使用调试符号(
gcc-g
)编译程序,然后使用valgrind--tool=memcheck
,让valgrind为您找到错误源。(1)您确定fopen成功吗?您确实需要检查以确保userlist
不为空(2)我在使用之前从未初始化过。看起来是因为我没有初始化。呜呜,哈哈。我觉得错过了那件事有点傻。哦,好的,谢谢你。