在C中打开文件进行读取

在C中打开文件进行读取,c,segmentation-fault,C,Segmentation Fault,我对C语言编程有一个问题,希望你们能给我很大的帮助 我应该编写一个控制台应用程序来管理人力资源。下面的代码应该检查userlist.txt文件是否存在,如果存在,则从中读取。代码编译和链接成功,但执行时出现分段错误 bool userListAvailable() { bool userListExist = false; struct user_details userlist[number_of_employee]; FILE *userListFile=fopen("userl

我对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;
}
bool userListAvailable(){
bool userlistext=false;
结构用户详细信息用户列表[员工人数];
FILE*userListFile=fopen(“userlist.txt”、“w”);
如果(!(userListFile==NULL)){
fread(userlist,sizeof(userlist),1,userListFile);
对于(int i=0;i

知道我做错了什么吗?我尝试了其他几个几乎相似的问题,但都是徒劳的。

除了上面的讨论

for(inti=0;i

很可能是错误的,因为您希望读取
number\u of_employee
,而不是缓冲区中的字节数


您很可能在
userlist[i]
处遇到segfault,因为
sizeof(userlist)
可能比
number\u of_employee

要检查userlist.txt文件是否存在,可以使用Open进行检查。
Open将返回新的文件描述符,如果发生错误,则返回-1(在这种情况下,将正确设置errno)
然后,如果返回的FD(文件描述符)与open不同,即-1,这意味着文件存在,并且您成功地打开了它,因此您可以使用FD读取它。

您不能从以
“w”
(只写)方式打开的文件中读取缩进。顺便说一句
如果(!(userListFile==NULL)){
应该是
如果(userListFile!=NULL){
@M.M-这一点很好,fread的结果未经检查;违反了。我尝试了上面提到的所有选项,使用gdb我一直遇到相同的问题。当我打印userListFile时,我得到了这个$1=(文件*)0x0应该是
sizeof userlist/sizeof*userlist
我将其设置为员工人数=(int)pow(2100)@Davidniwe你没有
1267650600228229401496703205376
员工或RAM来存储这么大的数组@Davidniwe这大约是地球人口的1.8e20倍。你在为星系间帝国做人力资源吗?@Mikhail非常感谢你,我实际上减少了员工的数量=(int)pow(2,10)它工作得很好。谢谢,谢谢。你的生活更安全。我设置了一个这么大的数字只是为了看看C和hooraaayy的力量!