在sprintf_s中使用sprintf_s函数

C++ Using function with sprintf_s inside sprintf_s

本文关键字:sprintf 函数      更新时间:2023-10-16

我想写入数据到字符缓冲区。因此我有一个函数来格式化我的数据。作为一个例子,我只是像这样传递一个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作为值?

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

您在writeData的两个调用中都重用sBufferData。在您绕过sprintf_s之前,对该函数的一次调用将覆盖另一次调用的结果。

添加一个单独的缓冲区:

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