我对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;
}
对我做错了什么的想法?我尝试了其他几乎几乎类似的问题,但这是徒劳的。
除了顶部的讨论
for (int i = 0; i < sizeof(userlist); ++i) {
最有可能是错误的,因为您想读取number_of_employee
,而不是缓冲区中的字节数。
很可能您会在userlist[i]
上获得SEGFAULT,因为sizeof(userlist)
可能比number_of_employee
如果要检查userList.txt文件是否存在,则可以使用Open进行检查。
OPEN将返回新的文件描述符,或者如果发生错误(在这种情况下,将适当设置Errno(,则将返回-1。这是男人http://man7.org/linux/man-pages/man2/open.2.html
那么,如果fd(文件描述符(与返回的open返回的是-1不同,则意味着文件存在并且您可以成功地打开它,因此您可以使用FD读取它。