我可以告诉解决方案如何使用C写这个格式化的数据

时间:2012-10-01 17:31:55

标签: c++ c visual-studio-2010 visual-c++

我必须将从服务器上恢复的二进制数据写入二进制文件,因此我编写了以下函数: -

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()函数,而我应该在第二行写 我可以告诉解决方案。

1 个答案:

答案 0 :(得分:2)

您的第一个问题(无法使用sprintf)不是问题,它正在按预期工作。您不能使用sprintf将二进制数据放入缓冲区。您需要以另一种方式放置数据(可能使用memcpy)。

至于你的第二个问题,数据是“一行” - 你说你正在写一个二进制文件;有零线。如果你想写一个行终止字符(\ n,\ r \ n等),那么你可以在你写完的其他数据之后写出来。