【发布时间】:2017-09-04 06:09:53
【问题描述】:
当我将字符串写入文件时,我首先将字符串的长度写为 int,然后是字符串本身。这是我的代码:
int wordLength = strlen(words);
fwrite(&wordLength,sizeof(int),1, outputFile);
fwrite(&words,sizeof(char),strlen(words), outputFile);
但是,当我将其返回时,我得到一个空字符串。这是我的阅读代码:
int strLength;
fread(&strLength, sizeof(int), 1, f);
char* word = (char*) malloc(strLength*sizeof(char));
fread(&word, sizeof(char), strLength, f);
为什么会这样?
【问题讨论】:
-
您的
strLength是否按预期正确输入? -
第二个 fwrite 可疑。如果
words是一个指针,那么您正在编写指针而不是它指向的内容。如果它是一个数组,你可以,但如果没有&,你也可以。发布不完整的程序片段使回答问题变得困难!第二个 fread 肯定是错误的;&word是指针的地址。它指向的缓冲区是您想要进入的缓冲区。 -
@MichaelDautermann 是的。
-
在调用任何堆分配函数时:(malloc, calloc, realloc),不要强制转换返回值。返回的类型是
void*,因此可以分配给任何其他指针。强制转换只会使代码混乱,使其更难以理解、调试等。注意:sizeof(char)在标准中定义为 1,因此只需使用 1。此外,将任何内容乘以 1 除了使代码混乱之外绝对没有任何作用。 -
@user3629249 关于您的第一条评论,我怀疑标识符
words可能已被选择它是单个字符串中的一组单词,而不是一组每个字符串都包含一个单词.