如何将int附加到tchar?

时间:2015-01-15 15:56:10

标签: c++ c string formatting

出于测试目的,我希望每次创建文件名以向其添加数字时 - 我正在测试的应用程序没有用户界面,并且可能会创建多个文件。

void somefunction()
{
    static INT iFileNo = 0;
    TCHAR tFileName[MAX_PATH] = L"c:/test/abcd.bmp";
    iFileNo ++;
}

我想以某种方式将iFileNo附加到tFileName(以获得类似abcd1.bmpabcd2.bmp ......)...我该怎么做?

注意:我没有使用任何字符串库

最小的图书馆......包括

#include <STDLIB.H>
#include <STDIO.H>
#include <TCHAR.H>

预期操作系统:Windows

3 个答案:

答案 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),请使用wstringstreamwstring

如果您真的不想使用C ++库,那么可以使用sprintf

char filename[100];
sprint(filename, "c:/test/abcd.tmp-%d", iFileNo);
iFileNo++

您需要确保缓冲区足够大以容纳文件名。

如果你真的不想使用任何库,那么Windows实际上拥有它自己的字符串格式化函数wsprintf,您可以使用它而不是sprintf