字符数据类型保持\ n,而它是两个字节

时间:2017-10-12 04:27:37

标签: c

我遇到了一个问题,试图制作一些函数来简化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;
}

1 个答案:

答案 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;);

糟糕。