在fwrite之前修剪buffer []中未使用的项目

时间:2012-01-19 14:07:25

标签: c fwrite

我正在根据一些局部变量创建一个包含内容的文件。我不知道文件最后会持续多长时间。由于我定义了一个固定大小的buffer[]数组,因此生成的文件中的最后一个字符是垃圾。在将buffer[]数组写入文件之前,我应该如何修剪它?或者只fwrite使用过的字节?

这是我的代码:

FILE * pFile = NULL;
char buffer[300];
int ret_val = -1;
strcpy_s(buffer, "The path is \"");
strcat_s(buffer, pathVariable);
strcat_s(buffer, "\"\n");
pFile = fopen(myfile, "w");
if(NULL == pFile)
{
  perror("File opening error");
  return -1;
}
ret_val = fwrite(buffer, 1, sizeof(buffer), pFile );
if(sizeof(buffer) != ret_val)
{
  perror("File writing error");
  return -1;
}
fclose(pFile);

2 个答案:

答案 0 :(得分:1)

传递给fwrite()的第三个参数是要写入的字节数,因此不是使用写入:

fwrite(buffer, 1, sizeof(buffer), pFile )

计算你真正想要写的字节数,然后执行:

fwrite(buffer, 1, numBytesToWrite, pFile )

答案 1 :(得分:1)

fwrite()不知道您认为哪些字节“已使用”。当你这样称呼时:

fwrite(buffer, 1, sizeof(buffer), pFile );

它会写sizeof(buffer)个字节。

将通话更改为:

ret_val = fwrite(buffer, 1, used_bytes, pFile );

其中used_bytes是您在调用之前设置的变量。

您还需要更改后续错误检查:

if(ret_val != used_bytes)

修改在这种情况下,您似乎希望将used_bytes设置为strlen(buffer)