在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);
我得到了不同的结果,例如Oello
或 Mello
。到底是怎么回事?
此代码不正确:
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
读取文件之前
我有一些代码可以将 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);
我得到了不同的结果,例如Oello
或 Mello
。到底是怎么回事?
此代码不正确:
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
读取文件之前