C ++在sprintf_s中使用sprintf_s的函数

时间:2015-05-14 20:11:29

标签: c++ char buffer

我想将数据写入char缓冲区。因此,我有一个函数来格式化我的数据。作为一个例子,我只是将一个int值传递给函数,如下所示:

using namespace std;
#include <iostream>

char* writeData(int iData, char* sBufferData){
    sprintf_s(sBufferData, 2048, "val:%i", iData);
    return sBufferData;
}

int _tmain(int argc, _TCHAR* argv[])
{

    char sBuffer[2048];
    char sBufferData[2048];

    sprintf_s(sBuffer, 2048, "%s, %s",
        writeData(1, sBufferData),
        writeData(2, sBufferData)
        );
    printf(sBuffer);

    cin.get();

    return 0;
}

但输出结果是: val:1,val:1

我想要的是: val:1,val:2

有人可以向我解释一下,为什么我在最终缓冲区中获得两次1的值?

1 个答案:

答案 0 :(得分:7)

char sBuffer[2048];
char sBufferData[2048];
sprintf_s(sBuffer, 2048, "%s, %s",
    writeData(1, sBufferData),
    writeData(2, sBufferData)
    );

您正在重复使用sBufferData来同时调用writeData。在您到达sprintf_s之前,对该函数的一次调用将覆盖另一个调用的结果。

添加一个单独的缓冲区:

char sBuffer[2048];
char sBufferData1[2048];
char sBufferData2[2048];
sprintf_s(sBuffer, 2048, "%s, %s",
    writeData(1, sBufferData1),
    writeData(2, sBufferData2)
    );