我遇到了C编程问题,希望大家提供帮助。
我应该编写一个管理人力资源的控制台应用程序。下面的代码应该检查 userlist.txt 文件是否存在,如果是,则从中读取。代码编译成功并成功链接,但执行时会出现分段错误。
bool userListAvailable() {
bool userListExist = false;
struct user_details userlist[number_of_employee];
FILE *userListFile=fopen("userlist.txt", "w");
if (!(userListFile == NULL)) {
fread(userlist, sizeof (userlist), 1, userListFile);
for (int i = 0; i < sizeof (userlist); ++i) {
if (strstr(userlist[i].email, "@") != NULL) {
userListExist = true;
break;
}
}
}
fclose(userListFile);
return userListExist;
}
对我做错了什么的任何想法?我尝试了其他几个几乎相似的问题,但这是徒劳的。
答案 0 :(得分:1)
除了顶部的讨论
for (int i = 0; i < sizeof(userlist); ++i) {
很可能是错误的,因为您想要读取number_of_employee
而不是缓冲区中的字节数。
您最有可能在userlist[i]
获得段错误,因为sizeof(userlist)
可能比number_of_employee
更大的数字
答案 1 :(得分:0)
如果要检查userlist.txt文件是否存在,可以使用Open进行检查
Open将返回新的文件描述符,如果发生错误则返回-1(在这种情况下,正确设置errno)。这是男人http://man7.org/linux/man-pages/man2/open.2.html
然后,如果返回的打开的FD(文件描述符)与-1不同,则表示该文件存在并且您已成功打开它,因此您可以使用FD读取它。