c - 关于 C 中的 fwrite() 错误
问题描述
读取文件并将数据乘以 2。之后,我编写了一个写入另一个文件的程序。该文件是一个 16 位文件。顺便说一句,创建的文件中只写入了一定数量。我不知道为什么会这样。请帮我。
C(视觉工作室 2017)
#define _CRT_SECURE_NO_WARNINGS
#define SIZE 16000
typedef short data_type;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
FILE *fd, *fd2;
data_type *data;
int n;
data = (data_type*)malloc(sizeof(data_type) * SIZE);
for (int i = 0; i < SIZE; i++)
data[i] = 0;
if ((fd = fopen("C:\\Users\\SeoHyeon\\Documents\\test16kSam16bMono.pcm", "r")) == NULL)
printf("Error opening file1");
if ((fd2 = fopen("C:\\Users\\SeoHyeon\\Documents\\test16kSam16bMono2.pcm", "w")) == NULL)
printf("Error opening file2");
n = fread(data, sizeof(data_type), SIZE, fd);
for (int i = 0; i < SIZE; i++)
data[i] = data[i] * 2.0;
if (fwrite(data, sizeof(data_type), SIZE, fd2) != SIZE) {
printf("Error writing to file.\n");
exit(1);
}
fclose(fd);
fclose(fd2);
free(data);
return 0;
}
解决方案
可能是程序没有以二进制模式打开这两个文件。
例如:
FILE *fin = fopen("input_file.bin", "rb"); // <-- Note the "rb"
如果您的文件以默认的文本模式打开,如果数据中有 EOF 字符,则文件输入可能会过早关闭。
编辑:此外,当您的文件处理fd
并且fd2
为 NULL 时,您应该处理错误。您还没有检查其他一些错误情况,但我将这些作为练习留给读者。
推荐阅读
- reactjs - 如何在 react-i18next 中更改语言
- angular - core.js:5980 错误类型错误:无法读取未定义的属性“名称”(角度)
- html - 在 CSS 网格布局中调整图像大小时的兼容性问题
- java - 在外部设备上测试时,Android Studio 组件无法正确居中
- javascript - axios 不会使用 axios-auth-refresh 库捕获错误
- java - Apache POI Excel XLSX Streaming XML 无法正确读取多个内联字符串
- python - AES - 将字符串更改为字节导致额外的“/”如何避免它
- ios - 如何防止 WKWebView 在后台状态下重新加载
- android - 如何使用 Kotlin 初始化和插入 Room 数据库?
- arrays - 出发板的 Deutschebahn API 未显示目的地站