2012-05-12 82 views
4

所以函數GetUserName()的輸出將用戶名作爲LPTSTR。我需要將其轉換爲LPCSTR,因爲我希望用戶名是ftp目錄的名稱。LPTSTR和LPCSTR C++

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是一個(非const)TCHAR字符串,並且 LPCSTR是一個常量字符串。

但是,如何將TCHAR轉換爲常量字符串?

我應該注意到我沒有豐富的編程/ C++背景,我還應該注意我正在編譯多字節而不是unicode。

+0

當不轉換任何東西:GetLastError()返回:12003和InternetGetLastResponseInfo()返回:7771a9a8。 – Rob

+0

只是要注意,FTPCreateDirectory API後,LPCTSTR,所以你可以簡單地做FTPCreateDirectory(hFtpSession,&ID) – johnathon

+0

GetUsername還需要一個LPTSTR,在那裏你還願意把你的TCHAR數組的參考。 – johnathon

回答

3

當你編譯支持多字節,不是Unicode你沒有做任何事情。 LPTSTR將隱式轉換爲LPCSTR,因爲它只是char*const char*的轉換。

+0

非常感謝您的回覆,請在Matteo的回答下查看我的意見。 – Rob

2

如果你不是爲Unicode編譯,TCHAR = char,所以你不需要轉換任何東西。另一方面,編譯爲Unicode時,您必須執行轉換;有幾個替代方案,看看here

+0

有趣的是,當我這樣做時:cout << FtpCreateDirectory(hFtpSession,username)<< endl; cout << GetLastError()<< endl;布爾變爲0(表示函數失敗),並且我收到的錯誤消息是:12003.我無法找到此錯誤的含義,因爲它沒有在http://msdn.microsoft.com/en-us/library上描述/windows/desktop/ms681384(v=vs.85).aspx。 – Rob

+0

但如果我會說newstring =「directoryname」,然後FtpCreateDirectory(hFtpSession,newstring);有用。爲什麼? – Rob

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

FtpCreateDirectory(hFtpSession,&id[0]); 

這段代碼應該工作在unicode或multibyte版本。

+0

感謝您的回覆jonathon,但它仍然無法正常工作。我得到完全相同的錯誤。但如果我會說newstring =「directoryname」,然後FtpCreateDirectory(hFtpSession,newstring);有用... – Rob