在C中将字符串写入二进制文件

Writing strings to binary files in C

我有一些代码可以将 char * 写入二进制文件,如下所示:

FILE *fp = fopen(path, "wb");
if (fp == NULL) {
    printf("Failed to open file at path: %s. %s\n", path, __PRETTY_FUNCTION__);
    return;
}

fwrite("Hello", 6, 1, fp);

问题是当我像这样从该文件中读取时:

FILE *fp = fopen(path, "rb");
if (fp == NULL) {
    printf("Failed to open file at path: %s. %s\n", path, __PRETTY_FUNCTION__);
    return;
}


char *str;
fread(str, 6, 1, fp);
printf("Got str: %s\n", str);

我得到了不同的结果,例如OelloMello。到底是怎么回事?

此代码不正确:

char *str;
fread(str, 6, 1, fp);
printf("Got str: %s\n", str);

char *str; 创建一个 未初始化的 字符指针。它指向的内存在哪里?

char str[ 7 ];
fread(str, sizeof( str ) - 1, 1, fp);
str[ sizeof( str ) - 1 ] = '[=11=]';
printf("Got str: %s\n", str);

会更好,尽管它仍然不检查 ​​fread() 中的 return 值以确保实际读取数据。

您还没有为 str

分配内存
char *str ; // You haven't allocated memory for it , Do
str=malloc(6*sizeof *str);

然后做

fread(str, 6, 1, fp);

此外,如果写入和读取发生在同一个翻译单元中,您应该这样做

fclose(fp); // to flush the output buffer and close the file descriptor

读取文件之前