如何将 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.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
),请使用 wstringstream
和 wstring
。
如果你真的不想使用C++库,那么你可以使用sprintf:
char filename[100];
sprint(filename, "c:/test/abcd.tmp-%d", iFileNo);
iFileNo++
您需要确保缓冲区足够大以保存文件名。
如果你真的不想使用任何库,那么Windows实际上有自己的字符串格式化功能wsprintf,你可以使用它代替sprintf
。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- 长 长 int 不要 长 int 好
- C++程序在循环后给出奇怪的int值
- 如何计算数据类型的范围,例如int
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 如何将 int 附加到 tchar