C读取dat文件出现如下错误?
各位老师,C读取dat文件出现如下错误该如何处理呢?文件2.dat中的数字是-1,读取出来是-859033299?代码如下:
include <stdio.h>
include <io.h>
int main() {
FILE* fp = fopen("D:\\2.dat", "rb");
int num;
fread(&num, sizeof(int), 1, fp);
printf("The number is: %d\n", num);
fclose(fp);
system("pause");
return 0;
} 本帖最后由 yep96 于 2023-8-20 14:11 编辑
按我的理解你的2.dat就是一个文本文件吧?那应该用fscanf指定为int读取
#include <stdio.h>
int main() {
FILE* fp = fopen("D:/2.dat", "r");
int num;
fscanf(fp, "%d", &num);
printf("The number is: %d\n", num);
fclose(fp);
return 0;
}
`fread` 和 `fscanf` 都是 C 语言标准库中用于文件操作的函数,但它们有不同的用途和特点:
1. **fread**:
- `fread` 函数是用来从文件中按照指定的字节数读取数据的。
- 它的函数原型是:`size_t fread(void *ptr, size_t size, size_t count, FILE *stream);`。
- 参数说明:
- `ptr`:指向要读取数据存储位置的指针。
- `size`:要读取的每个数据项的字节数。
- `count`:要读取的数据项的数量。
- `stream`:要读取的文件指针。
- `fread` 返回实际读取的数据项数量,如果返回值与 `count` 不相等,可能意味着已经读取到文件末尾或出现了错误。
2. **fscanf**:
- `fscanf` 函数用于按照格式化字符串从文件中读取数据。它可以根据指定的格式将数据解析成不同的类型,例如整数、浮点数、字符串等。
- 它的函数原型是:`int fscanf(FILE *stream, const char *format, ...);`。
- 参数说明:
- `stream`:要读取的文件指针。
- `format`:格式化字符串,指定了要读取的数据的格式。
- `...`:可变数量的参数,用于接收解析后的数据。
- `fscanf` 返回成功读取的数据项数量,如果返回值与预期的参数数量不匹配,可能意味着解析错误或已经读取到文件末尾。
**主要区别**:
- `fread` 是按字节数读取,不关心数据的具体类型。适用于以二进制格式存储的数据。
- `fscanf` 则是按照格式化字符串解析不同类型的数据,适用于人可读的文本文件。
你需要根据具体情况来选择使用哪个函数,通常在处理文本数据时使用 `fscanf`,而在处理二进制数据时使用 `fread`。 这两行代码的前面不需要带上#号的吗?
#include <stdio.h>
#include <io.h> yep96 发表于 2023-8-20 14:06
按我的理解你的2.dat就是一个文本文件吧?那应该用fscanf指定为int读取
#include
...
谢谢老师,非常正确,谢谢了 e百年 发表于 2023-8-20 14:09
这两行代码的前面不需要带上#号的吗?
#include
#include
...............................要有#号 请仔细查看int类型的范围 写的代码发出来看看! jtwc 发表于 2023-8-20 14:26
谢谢老师,非常正确,谢谢了
不用客气我也不是老师,我浅显的理解里,二进制流写入/读取比较适合保存/恢复结构体这类复杂但是格式确定的数据结构 读取出来是-859033299?我来告诉你为什么。你的dat文件其实就是个文本文件,“-1”储存在文件中是2d 31,一共两个字节。
当你用fread(&num, sizeof(int), 1, fp)读取的时候,你的参数表示你要读取1个sizeof(int),也就是4个字节。但是文件里面总共只有2个字节,所以读取到了0x312d。
而你的num变量没有初始化,debug编译的话,可能默认给了初始值0xCCCCCCCC,低2个字节在fread的时候读取到了0x312d,所以最后num就是0xCCCC312d。
0xCCCC312d <-> -859033299
你需要修改为fread(&num,2 , 1, fp) yes2 发表于 2023-8-20 21:31
读取出来是-859033299?我来告诉你为什么。你的dat文件其实就是个文本文件,“-1”储存在文件中是2d 31,一 ...
谢谢老师
页:
[1]