从C中的文本文件读入数据时出现Seg错误
我试图从一个文本文件中获取信息并将其读入,主要是获取文件的长度(以字节为单位),以及文件名以确保其存在,并将其传递给此方法 我在那里有一些测试代码,用于查看问题所在,但我似乎看不到seg故障来自何处,fgetc返回值与其存储的值匹配,这是我唯一能想到的从C中的文本文件读入数据时出现Seg错误,c,file,segmentation-fault,C,File,Segmentation Fault,我试图从一个文本文件中获取信息并将其读入,主要是获取文件的长度(以字节为单位),以及文件名以确保其存在,并将其传递给此方法 我在那里有一些测试代码,用于查看问题所在,但我似乎看不到seg故障来自何处,fgetc返回值与其存储的值匹配,这是我唯一能想到的 uint32 getCode(char*fileA,int count){ //创建变量以存储我们正在读取的数据 int缓冲区=0; 寄存器uint64总计=0; //使用rb打开可以确保所有文件类型都是可读的 文件*文件; 如果(file=fo
uint32 getCode(char*fileA,int count){
//创建变量以存储我们正在读取的数据
int缓冲区=0;
寄存器uint64总计=0;
//使用rb打开可以确保所有文件类型都是可读的
文件*文件;
如果(file=fopen(fileA,“rb”)){
printf(“\n文件名:%s\n计数:%d\n”,文件A,计数);
}
//同时循环每次读取32位或4字节
而(计数>0){
缓冲区=fgetc(文件);
计数--;
printf(“\n%s”,缓冲区);
}
fclose(文件);
返回1;
}
分段错误来自printf(“\n%s”,缓冲区)代码>--您的缓冲区不是字符串,使用'%c'
是的,循环一次读取32位或4个字节时,注释//有点误导,因为您一次读取1个字节。分段错误来自printf(“\n%s”,缓冲区)代码>--您的缓冲区不是字符串,使用'%c'
是的,注释//一次循环读取32位或4个字节时有点误导,因为一次读取1个字节。打印时使用%c
格式,现在将int
传递给%s
。另外,启用编译器警告。您还可以使用文件
,即使它无法打开,也可能是空指针。printf(“\n%s”,buffer)代码>??Buffer是一个int。确实试图编辑问题的标题并将其更改为:在使用无效格式字符串调用printf时遇到Seg错误
。读取数据与seg故障无关。编译时始终启用警告。很明显,你没有这样做,或者选择忽略它们。对于gcc/clang,在VS使用/W3
时,尽量少使用-Wall-Wextra-pedantic
(建议也使用-Wshadow
),并且在编译代码之前不要接受代码,除非没有警告。打印时使用%c
格式,现在将int
传递给%s
。另外,启用编译器警告。您还可以使用文件
,即使它无法打开,也可能是空指针。printf(“\n%s”,buffer)代码>??Buffer是一个int。确实试图编辑问题的标题并将其更改为:在使用无效格式字符串调用printf时遇到Seg错误
。读取数据与seg故障无关。编译时始终启用警告。很明显,你没有这样做,或者选择忽略它们。对于gcc/clang,在VS使用/W3
时,应尽量少使用-Wall-Wextra-pedantic
(建议也使用-Wshadow
),并且在编译代码之前不要接受代码,除非代码没有警告。