0

此代码应该编译没有错误,您应该-lcomdlg32为对话框链接。程序返回:0x22fcd8或者68如果我使用指针。并且应该(我认为)在对话框中返回文件用户类型的名称。

#include <windows.h>
#include <iostream>

int main() {
  wchar_t szFileName[MAX_PATH] = {0};
  OPENFILENAMEW ofn;
  ZeroMemory(&ofn, sizeof(ofn));
  ofn.lStructSize = sizeof(OPENFILENAME);
  ofn.nMaxFile = MAX_PATH;
  ofn.lpstrFile = szFileName;
  GetSaveFileNameW(&ofn);

  using namespace std;
  cout << szFileName << endl;
  cout << *szFileName << endl; // also a number not a string
}
4

2 回答 2

6

wcout如果要将数组输出wchar_t为以空字符结尾的宽字符串,则必须使用。

于 2013-01-18T18:59:55.707 回答
2

cout不支持wchar_tor wchar_t*,但支持intand void*。编译器最终将 转换wchar_t为 int,并将 降级wchar_t*void*. 这就是为什么您会看到cout打印 的数值wchar_t和 的内存地址的原因wchar_t*

改为使用wcout。它支持wchar_tand wchar_t*,因此它可以打印实际数据:

wcout << szFileName << endl;
wcout << *szFileName << endl;
于 2013-01-18T19:46:14.080 回答