【发布时间】:2011-04-08 04:56:51
【问题描述】:
我正在尝试学习一点 C++,但我有一个愚蠢的问题。考虑这段代码:
TCHAR tempPath[255];
GetTempPath(255, tempPath);
为什么 windows 需要 var tempPath 的大小?我看到 GetTempPath 被声明为:
GetTempPath(dword size, buf LPTSTR);
如果没有& 操作符,windows 如何改变 buf 值?功能不应该是这样吗?
GetTempPath(buf &LPTSTR);
谁能提供一个简单的GetTempPath 实现示例,以便我了解size 是如何使用的?
编辑:
感谢您的所有回答,它们都是正确的,我给了您所有 +1。但我的意思是“有人可以提供一个简单的GetTempPath 实现吗?我尝试编写一个类似于 windows 使用的函数,如下所示:
void MyGetTempPath(int size, char* buf)
{
buf = "C:\\test\\";
}
int main(int argc, char *argv[])
{
char* tempPath = new TCHAR[255];
GetTempPathA(255, tempPath);
MessageBoxA(0, tempPath, "test", MB_OK);
return EXIT_SUCCESS;
}
但它不起作用。 MessageBox 显示“##$”字符串。MyGetTempPath 应该如何编码才能正常工作?
【问题讨论】:
-
C++ 没有内置的字符串类型。相反,您使用字符数组和指针。语句
buf = "C:\\test\\"将“C:\\test\\”的地址复制到buff。但是,由于指针本身是按值传递的,所以调用者的 buf 没有更新,它什么也不做。尝试改用strcpy_s。