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
给调用此函数的任何人,因为它是基于堆栈的,并且当此函数退出时,缓冲区将消失。如果你这样做,你的程序会在你调试/测试时崩溃,如果你幸运的话。如果你不走运,它可能看起来工作正常,但它会是一个定时炸弹。