在C中打开文件进行读取
我对C语言编程有一个问题,希望你们能给我很大的帮助 我应该编写一个控制台应用程序来管理人力资源。下面的代码应该检查userlist.txt文件是否存在,如果存在,则从中读取。代码编译和链接成功,但执行时出现分段错误在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
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的力量!