出于测试目的,我希望每次创建文件名以向其添加数字时 - 我正在测试的应用程序没有用户界面,并且可能会创建多个文件。
void somefunction()
{
static INT iFileNo = 0;
TCHAR tFileName[MAX_PATH] = L"c:/test/abcd.bmp";
iFileNo ++;
}
我想以某种方式将iFileNo
附加到tFileName
(以获得类似abcd1.bmp
,abcd2.bmp
......)...我该怎么做?
注意:我没有使用任何字符串库
最小的图书馆......包括
#include <STDLIB.H>
#include <STDIO.H>
#include <TCHAR.H>
预期操作系统:Windows
答案 0 :(得分:2)
您可以轻松,轻松或轻松地完成这项工作。中间的那些将是:
void somefunction()
{
static unsigned int uiFileNo = 0;
static const WCHAR wSpec[] = L"c:/test/abcd%u.bmp";
WCHAR wFileName[MAX_PATH];
swprintf_s(wFileName, MAX_PATH, wSpec, uiFileNo++);
}
使用swprintf_s
,这似乎符合您的包含文件限制(假设这是Windows,您的问题似乎表明了这一点。)
我个人使用std::wstring
,但看来你有理由反对它。祝你好运。
答案 1 :(得分:2)
您已表示不希望使用任何库。这不是我支持的选择,但是因为你问过......
最简单的方法是确定固定数量的数字,前导零。这使问题变得微不足道。在这个例子中,我使用两位数。
void somefunction()
{
static INT iFileNo = 0;
TCHAR tFileName[MAX_PATH] = L"c:/test/abcd00.bmp";
int iNumberOffset = 12;
if (iFileNo >= 100)
throw std::runtime_error("File number too large");
tFileName[iNumberOffset] += iFileNo / 10;
tFileName[iNumberOffset+1] += iFileNo % 10;
iFileNo ++;
}
答案 2 :(得分:1)
您可以使用ostringstream:
std::ostringstream s;
s << "c:/test/abcd.bmp"
s << iFileNo++;
std::string filename = s.str();
如果您想要宽版本(因为您在示例中指定了L
),请使用wstringstream
和wstring
。
如果您真的不想使用C ++库,那么可以使用sprintf:
char filename[100];
sprint(filename, "c:/test/abcd.tmp-%d", iFileNo);
iFileNo++
您需要确保缓冲区足够大以容纳文件名。
如果你真的不想使用任何库,那么Windows实际上拥有它自己的字符串格式化函数wsprintf,您可以使用它而不是sprintf
。