我遇到了一个问题,试图制作一些函数来简化C中的FileIO,其中\ n在计算机上存储为两个字节,但是保存在一个char中。这导致加载的文件略短于实际大小,最后会产生一些额外的垃圾。我使用字符作为字节,因为它是唯一保存单个字节的数据类型。 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
long getFileSize(char fileName[]) {
FILE* f;
long size;
f = fopen(fileName, "r");
fseek(f, 0L, SEEK_END);
size = ftell(f);
return size;
}
char* readFile(char fileName[]) {
FILE* f;
char* data;
long size;
f = fopen(fileName, "r");
size = getFileSize(fileName);
data = malloc(size);
fread(data, 1, size, f);
fclose(f);
return data;
}
char* writeFile(char fileName[], char* data, long length) {
FILE* f;
f = fopen(fileName, "w");
fwrite(data, 1, length, f);
fclose(f);
return data;
}
int main(void) {
char* data = readFile("test.txt");
long size = getFileSize("test.txt");
int i;
printf("%li\n", size);
for(i = 0; i < size; i++) {
printf("%c", *(data + i));
}
printf("\n");
writeFile("test.txt", data, size);
free(data);
return 0;
}
答案 0 :(得分:1)
问题是我使用了&#34; w&#34;和&#34; r&#34;而不是&#34; wb&#34;和&#34; rb&#34;,正如@chux
所指出的那样fopen(fileName,&#34; r&#34;); - &GT; fopen(fileName,&#34; rb&#34;);
糟糕。