如何将 int 附加到 tchar

How can I append an int to a tchar?

本文关键字:tchar int      更新时间:2023-10-16

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

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>

预期操作系统:视窗

你可以使这变得困难,容易或非常容易。其中的中间是这样的:

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

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