0

如何将数字附加到 LPCTSTR?我正在使用的库采用 LPCTSTR 作为 com 端口地址。我知道如何使用 char* 来做到这一点,但不知道如何使用 LPCTSTR。这就是我想要做的(假设 sprintf 与这些一起工作,我知道它没有)

LPCTSTR PortString;
int ComPortNumber;

sprintf(PortString,"COM%d",ComPortNumber);

这样完成后,如果 9 存储在 ComPortNumber 整数中,LPCTSTR PortString 将包含“COM9”。

4

7 回答 7

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

于 2013-02-11T23:27:41.680 回答
2

带有 LPCTSTR 的 API 将该参数声明为常量字符串,以向您表明它不会修改给定的字符串。您仍然可以将非常量字符串传递给此 API。

所以你可以这样做:

CHAR PortString[32];
int ComPortNumber;

sprintf(PortString,"COM%d",ComPortNumber);
于 2013-02-11T23:24:00.807 回答
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给调用此函数的任何人,因为它是基于堆栈的,并且当此函数退出时,缓冲区将消失。如果你这样做,你的程序会在你调试/测试时崩溃,如果你幸运的话。如果你不走运,它可能看起来工作正常,但它会是一个定时炸弹。

于 2013-02-11T23:31:47.290 回答
0

LPCTSTR只是 a const TCHAR *,当您接受它作为参数时使用它。

您可能希望将字符串分配为数组。此外,使用通用文本映射:

TCHAR PortString[20];
int ComPortNumber;

_stprintf(PortString,_T("COM%d"),ComPortNumber);

并包括 tchar.h。

于 2013-02-11T23:25:15.047 回答
0

LPCTSTR 是 const char* 或 const wchar_t* 的 typedef。就像使用 char* 但使用_stprintf一样。

于 2013-02-11T23:28:22.330 回答
0

如果你真的想用TCHAR东西:

用于_stprintf填充TCHAR缓冲区,该缓冲区应该是一个数组:

TCHAR PortString[32]; /* as another answer says */
于 2013-02-11T23:25:56.357 回答
0

您可以创建一个CString,然后当您完成向其附加内容后,您可以调用CString::operator LPCSTR() const 它以从中获取LPCSTR

于 2013-02-11T23:26:25.987 回答