在C语言文件操作体系中,char类型作为最小的字符存储单位,承担着文本字符读写和二进制字节传输的核心作用,几乎所有基础文件操作函数都围绕char类型设计实现逻辑。

char在文本文件字符读写中的应用
文本文件操作最常用的两个函数是fgetc和fputc,这两个函数的参数和返回值都和char类型直接相关。fgetc从文件读取一个字符,返回值是int类型,实际读取的字符会存储在int的低8位,当读取到文件末尾时返回EOF,EOF本质是-1,因此不能用char类型直接接收返回值,否则可能和合法字符冲突。
下面是使用fgetc和fputc复制文本文件的示例:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *src_file = fopen("source.txt", "r");
FILE *dest_file = fopen("dest.txt", "w");
int ch; // 用int接收返回值,避免EOF判断错误
if (src_file == NULL || dest_file == NULL) {
printf("文件打开失败n");
return 1;
}
// 循环读取字符直到文件末尾
while ((ch = fgetc(src_file)) != EOF) {
// 将读取到的字符写入目标文件,ch会自动转换为char类型
fputc(ch, dest_file);
}
fclose(src_file);
fclose(dest_file);
return 0;
}
char在二进制文件字节读写中的应用
二进制文件操作常用的fread和fwrite函数,也经常以char类型作为数据缓冲区的类型,因为二进制文件的本质是按字节存储数据,char类型刚好对应一个字节的存储单元。
使用fread和fwrite复制二进制文件的示例如下:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *src_file = fopen("source.bin", "rb");
FILE *dest_file = fopen("dest.bin", "wb");
char buffer[1024]; // 用char数组作为缓冲区,每个元素对应一个字节
size_t read_size;
if (src_file == NULL || dest_file == NULL) {
printf("文件打开失败n");
return 1;
}
// 每次读取1024个字节,写入目标文件
while ((read_size = fread(buffer, 1, sizeof(buffer), src_file)) > 0) {
fwrite(buffer, 1, read_size, dest_file);
}
fclose(src_file);
fclose(dest_file);
return 0;
}
char在文件操作中的注意事项
- 不要用char类型直接接收
fgetc的返回值,因为char可能是无符号类型,无法正确判断EOF,会导致循环无法终止。 - 使用
fread读取文本文件时,如果遇到换行符等转义字符,char数组会原样存储,不需要额外处理编码转换,除非涉及多字节字符集。 - 当用char数组作为
fgets的缓冲区时,函数会自动在读取的字符串末尾添加