【发布时间】:2016-06-22 20:38:09
【问题描述】:
我有以下 c++ 代码:
#include "stdafx.h"
#include <atlstr.h>
int _tmain(int argc, _TCHAR* argv[])
{
CString OFST_PATH;
TCHAR DIR_PATH[MAX_PATH];
GetCurrentDirectory(MAX_PATH, DIR_PATH);
OFST_PATH.Format(DIR_PATH);
CHAR *pOFST_PATH = (LPSTR)(LPCTSTR)OFST_PATH;
return 0;
}
我想了解为什么程序末尾pOFST_PATH的值是“c”? (LPSTR)(LPCTSTR) 对变量 OFST_PATH 的强制转换对写入其中的整个路径做了什么?
正如您在以下窗口中看到的,调试变量时的值是:
【问题讨论】:
-
你会帮自己一个忙,避免用所有这些微软特有的突变(如 LPCSTR 和 Cstring 等)污染你的大脑;而是坚持使用 C++ 标准类型,例如
char *和std::string。 -
我完全同意你的观点,但我被限制只能使用它们:/
-
这很不幸。过去,面对不可接受的工作环境,我通过换工作解决了问题。这种代码看得我眼花,怕长期脑损伤。