尝试使用fread读取字节但出现分段错误11

时间:2019-05-08 03:42:34

标签: c file byte

我正在将一个字符串作为字节写入文件,然后想使用strtol将二进制代码读回一个字符串。我检查了二进制文件,它包含使用xxd -b文件名包含的字母的二进制文件。但是,当我尝试将其读回并将其转换为字符串时,会出现分段错误11。不确定我在做什么错。

#include <stdio.h>
#include <stdlib.h>

int main() {

    FILE* fr = fopen("kot.bin", "wb+");
    size_t written = fwrite("n", 1, 1, fr);
    printf("written is: %zu\n", written);
    fclose(fr);

    FILE* fw = fopen("kot.bin", "rb");
    char * name;
    size_t red = 0;
    red = fread(name, 1, 1, fw);
    if (red==0) {
        printf("ur wrong\n");
    }
    printf("red: %zu\n", red);
    char c = (char) strtol(name, NULL, 2);
    printf("c: %c\n", c);

    return 0;
}

我只是想在缓冲区中存储一个字节,使用strtol将其变成一个字符并打印出来。

1 个答案:

答案 0 :(得分:2)

首先,您忽略了分配内存以读取字节。我建议:

name = (char*)malloc(1);

第二,您使用strtol毫无意义。您有一个包含“ n”的字节。 Thi不是以空值结尾的字符串,所以我认为在其上调用strtol会导致未定义的行为。但是无论如何,“ n”都不是数字,因此strtol将返回0。然后将long int 0强制转换为char。如果不查找,我不知道哪个字符(如果有的话)对应于long int值0,但是肯定不是'n'。这样做:

printf("c: %c\n", *name);