如何将数字附加到LPCTSTR?我正在使用的库使用LPCTSTR作为com端口地址。我知道如何使用char *来实现这一点,但不知道如何使用LPCTSTR。这就是我想要做的事情(假设sprintf与这些一起工作,我知道它没有)
LPCTSTR PortString;
int ComPortNumber;
sprintf(PortString,"COM%d",ComPortNumber);
这样,当完成此操作时,如果9存储在ComPortNumber整数中,则LPCTSTR PortString将包含“COM9”。
答案 0 :(得分:3)
您可以使用tchar.h中的安全版本。
TCHAR PortString[32];
int ComPortNumber;
_stprintf_s( PortString, 32, _T("COM%d"), ComPortNumber );
http://msdn.microsoft.com/en-us/library/ce3zzk1k%28VS.80%29.aspx
答案 1 :(得分:2)
使用LPCTSTR的API将该参数声明为常量字符串,以指示它不会修改它给定的字符串。您仍然可以将非常量字符串传递给此API。
所以你可以这样做:
CHAR PortString[32];
int ComPortNumber;
sprintf(PortString,"COM%d",ComPortNumber);
答案 2 :(得分:1)
LPCTSTR是指向TCHAR的指针 - 换句话说是指向字符串的指针。在您提供的代码段中,它指向一些随机的内存区域,并且运行代码是未定义的行为,因为您通过取消引用未初始化的指针来访问某些随机内存区域。
请尝试使用此代码:
TCHAR PortString[64];
int ComPortNumber;
/* assign some value to ComPortNumber here */
_sntprintf_s(
PortString, // The buffer for the output
sizeof(PortString)/sizeof(TCHAR), // The number of TCHARs in the buffer
_TRUNCATE, // How to handle overflows
_T("COM%d"), // The format string
ComPortNumber); // And the port number, finally!
我使用调用和类型的T
变体来确保您的代码可以在ANSI / MBCS和UNICODE模式下编译,以及_sntprintf
的新“安全”变体来帮助减少缓冲区溢出的可能性。
在实际生产代码中,您应该检查_sntprintf_s
调用错误的返回地址。
最后一点:小心不将PortString
返回给调用此函数的人,因为它是基于堆栈的,当此函数退出时,缓冲区将消失。如果你这样做,你的程序会在你调试/测试时崩溃,如果你很幸运的话。如果你不幸运,它可能出现以正常工作,但它将是一个滴答作响的定时炸弹。
答案 3 :(得分:0)
LPCTSTR
仅仅是const TCHAR *
,您在接受它作为参数时会使用它。
您可能希望将字符串分配为数组。另外,使用通用文本映射:
TCHAR PortString[20];
int ComPortNumber;
_stprintf(PortString,_T("COM%d"),ComPortNumber);
并包含tchar.h。
答案 4 :(得分:0)
答案 5 :(得分:0)
您可以创建一个CString
,然后当您完成所有内容添加后,您可以调用其上的CString::operator LPCSTR() const
从中获取LPCSTR
。
答案 6 :(得分:0)
LPCTSTR是const char *或const wchar_t *的typedef。就像使用char *一样,但使用_stprintf。