如何将 int 附加到 tchar?

How can I append an int to a tchar?

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

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>

预期OS:Windows

您可以使用 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

您可以让它变得困难、简单或非常简单。这些中间的东西是这样的:

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,但您似乎有理由反对它。无论如何,祝你好运。

您表达了不使用任何库的愿望。这不是我会认可的选择,但既然你问了...

最简单的方法是确定固定的数字位数,前导零。这使问题变得微不足道。在此示例中,我使用了两位数字。

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 ++;
}