C++ 在 sprintf_s 中使用带有 sprintf_s 的函数
C++ Using function with sprintf_s inside sprintf_s
我想将数据写入字符缓冲区。因此,我有一个 函数来格式化我的数据 。例如,我只是将一个 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)
);
我想将数据写入字符缓冲区。因此,我有一个 函数来格式化我的数据 。例如,我只是将一个 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)
);