用fread替换feof
时间: 2023-06-19 22:09:35 浏览: 53
在 C 语言中,feof 函数用于检查文件是否已经结束。但是,使用 feof 函数有时会引起一些问题,因为它只在读取文件时才会将文件指针移到文件结尾,而在文件结尾之前调用它可能会导致错误。
相反,可以使用 fread 函数来读取文件,因为 fread 函数返回读取的字节数,如果返回值小于预期的字节数,则可以判断文件已经结束。 以下是使用 fread 函数来替换 feof 函数的示例代码:
```c
FILE *fp;
char buffer[1024];
size_t bytes_read;
fp = fopen("file.txt", "r");
if (fp == NULL) {
perror("Error opening file");
return -1;
}
while ((bytes_read = fread(buffer, sizeof(char), sizeof(buffer), fp)) > 0) {
// 处理读取到的数据
}
if (ferror(fp)) {
perror("Error reading file");
}
fclose(fp);
```
在这个示例中,fread 函数被用来读取文件,并且当返回值小于预期的字节数时循环会停止。如果在读取文件时发生错误,可以使用 ferror 函数来获取更多的错误信息。最后,不要忘记关闭文件指针。
相关问题
Linux 用fread fwrite 复制一张图片,c语言
可以使用以下代码复制一张图片:
```c
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024
int main() {
FILE *source_file, *target_file;
char buffer[BUFFER_SIZE];
source_file = fopen("source_image.jpg", "rb");
if (source_file == NULL) {
printf("Failed to open source file.");
return 1;
}
target_file = fopen("target_image.jpg", "wb");
if (target_file == NULL) {
printf("Failed to open target file.");
return 1;
}
while (!feof(source_file)) {
size_t bytes_read = fread(buffer, 1, BUFFER_SIZE, source_file);
fwrite(buffer, 1, bytes_read, target_file);
}
fclose(source_file);
fclose(target_file);
return 0;
}
```
请将代码中的 "source_image.jpg" 和 "target_image.jpg" 替换为你实际的文件名,并确保目标文件的目录已存在。
我有一个.bin文件,怎么使用fread将他全部读进数组中
可以使用以下代码将二进制文件读入数组中:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
char filename[] = "example.bin"; // 文件名
int arr[100]; // 数组
int count = 0; // 计数器
// 打开文件
fp = fopen(filename, "rb");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
// 读取文件内容
while (!feof(fp)) {
fread(&arr[count], sizeof(int), 1, fp);
count++;
}
// 关闭文件
fclose(fp);
// 输出数组内容
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在上面的代码中,我们使用`fopen()`函数打开文件,并将文件指针赋给`fp`变量。然后我们使用`fread()`函数读取文件内容,每次读取一个整数,并将其存储在数组中。最后我们使用`fclose()`函数关闭文件,并输出数组内容。注意,我们在`fread()`函数中使用了`&`符号来获取数组元素的地址,以便将读取的数据存储在数组中。
你可以将上面的代码中的`example.bin`替换为你的二进制文件的文件名,以将其读入数组中。