【问题标题】:LPTSTR and LPCSTR C++LPTSTR 和 LPCSTR C++
【发布时间】:2012-05-20 21:30:37
【问题描述】:

因此函数 GetUserName() 的输出将用户名作为 LPTSTR 提供。我需要将其转换为 LPCSTR,因为我希望用户名是 ftp 目录的名称。

TCHAR id [UNLEN+1];
DWORD size = UNLEN+1;
GetUserName(id, &size); // this is an LPTSTR

FtpCreateDirectory(hFtpSession,id) // 2d parameter should be an LPCSTR

问题是我需要将 LPTSTR 字符串转换为 LPCSTR 字符串。现在我知道了:

LPTSTR 是一个(非常量)TCHAR 字符串,并且 LPCSTR 是一个常量字符串。

但是如何将 TCHAR 转换为 const 字符串?

我应该注意我没有丰富的编程/C++ 背景,我还应该注意我正在编译多字节,而不是 unicode。

【问题讨论】:

  • 不转换任何东西时:GetLastError() 返回:12003 和 InternetGetLastResponseInfo() 返回:7771a9a8。
  • 请注意,FTPCreateDirectory api 需要 LPCTSTR ,所以你可以简单地做 FTPCreateDirectory(hFtpSession,&id)
  • GetUsername 也需要一个 LPTSTR ,在那里你也可以引用你的 tchar 数组。
  • 原来我的 ftpserver 上有 FILE(不是目录),它的名称与我的用户名完全相同。因此,当我删除该文件时,一切正常。尽管如此,还是感谢您的帮助。

标签: c++ lpcstr lptstr


【解决方案1】:
TCHAR id [UNLEN+1];
DWORD size = UNLEN+1;
GetUserName(&id[0], &size); // this is an LPTSTR

FtpCreateDirectory(hFtpSession,&id[0]);

此代码应在 unicode 或多字节构建中工作。

【讨论】:

  • 感谢您的回复 jonathon,但它仍然不起作用。我得到完全相同的错误。但如果我说 newstring = "directoryname" 然后 FtpCreateDirectory(hFtpSession,newstring);它有效...
【解决方案2】:

如果你不是为 Unicode 编译,TCHAR=char,所以你不需要转换任何东西。另一方面,在为 Unicode 编译时,您必须执行转换;有几种选择,看看here

【讨论】:

  • 有趣,当我这样做时: cout msdn.microsoft.com/en-us/library/windows/desktop/… 上没有描述。
  • 但如果我说 newstring = "directoryname" 然后 FtpCreateDirectory(hFtpSession,newstring);有用。为什么会这样?
【解决方案3】:

当您编译多字节而不是 unicode 时,您无需执行任何操作。 LPTSTR 将隐式转换为 LPCSTR,因为它只是 char*const char* 的转换。

【讨论】:

  • 非常感谢您的回复,请在Matteo的回答下查看我的cmets。
猜你喜欢
  • 2010-09-24
  • 1970-01-01
  • 2016-05-12
  • 2015-12-01
  • 2012-10-29
  • 2012-07-26
  • 2015-08-12
  • 1970-01-01
  • 2020-06-27
相关资源
最近更新 更多