我正在将一个字符串作为字节写入文件,然后想使用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将其变成一个字符并打印出来。
答案 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);