我必须将从服务器上恢复的二进制数据写入二进制文件,因此我编写了以下函数: -
int WriteToDataFile1(char buf[])
{
char szDate[12];
char szTime[12];
char buf_buff[2500];
_strdate( szDate );
_strtime( szTime );
memset(buf_buf, 0, sizeof(buf_buff));
FILE* log = fopen(BufferFilePath11, "a+");
if (log == NULL)
return -1;
fwrite(buf,1,135,log); //working fine
fclose(log);
return 0;
}
我遇到两个问题: - 1)我必须写二进制数据,如DATE :: TIME :: DATA IS :: DATA。 我无法做到以下几点: -
sprintf(buf_buf,"%s::%s::DATA IS::", szDate, szTime,buf);
因为sprintf会在遇到“buf”中的空字符时终止它。 服务器总是有135byte数据但有时在第17个字节或其他字节有空字符,所以sprintf会终止字符串,我不会写完整的二进制数据。 我的第二个问题是fwrite我的数据是一行甚至第二次WriteToDataFile1()函数,而我应该在第二行写 我可以告诉解决方案。
答案 0 :(得分:2)
您的第一个问题(无法使用sprintf)不是问题,它正在按预期工作。您不能使用sprintf将二进制数据放入缓冲区。您需要以另一种方式放置数据(可能使用memcpy)。
至于你的第二个问题,数据是“一行” - 你说你正在写一个二进制文件;有零线。如果你想写一个行终止字符(\ n,\ r \ n等),那么你可以在你写完的其他数据之后写出来。