我试图通过给定的文件读取然后标记它.唯一的问题im有是fgets.文件打开没有收到任何错误.我在网站上的其他地方看到了这一点,但是无论我如何设置,包括设置fileLine到一个像(char fileline [200])这样的设置量,我得到一个分段错误.提前感谢任何帮助.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[]){
char *fileName = "0";
char *tokenize, *savePtr;
struct Record *database= malloc(sizeof(database[0]));
int recordNum =0;
char *fileLine = malloc(sizeof(char *));//have replaced with fileline[200] still didnt work
FILE *fd = open(fileName,O_RDWR);
if(fd< 0){
perror("ERROR OPENING FILE");
}
while(fgets(fileLine,200,fd) !=NULL){
printf("%s\n", fileLine);
tokenize = strtok_r(fileLine,",",&savePtr);
while(tokenize != NULL){
//TOKENIZING into a struct
}
}
3条答案
按热度按时间ykejflvf1#
为什么要将open()与
FILE
一起使用?请改用fopen()。正如Weather Vane所说,如果使用
open()
,则fd < 0
可以工作。但是,对于fopen()
,您应该检查指针是否为NULL
,等价于fd == 0
。打开文件的这些函数之间的比较可以在以下中找到:
我的想法是
fopen()
是更高级别的。x4shl7ld2#
这条线
为
char *
类型分配内存,4或8字节(取决于平台)。所以当你这么做的时候
它期望有200字节的可用存储器。
试试这个:
其将分配所需的存储器。
vbkedwbf3#
您正在使用
open()
而不是fopen()
。您不能确定文件是否正确打开,因为
fopen()
不返回整数,而是返回指向FILE *
对象的指针,失败时返回NULL
,因此正确的条件是在代码中,即使
fopen()
失败,您仍然使用fgets()
,在这种情况下,您应该中止程序。另外,
malloc()
将字节数作为大小参数,因此如果希望fgets()
仅读取count
字节,则malloc()
应为如果启用编译警告,编译器将指出代码中的所有问题。