2016-01-31 45 views
0

我正在寫一個Winsock應用程序,並在一個點上,我需要形成一個HTTP請求的網頁的TCP消息。Windows Char和Char類型和字符串與Console :: WriteLine()

char clientmessage[] = "GET/HTTP/1.1\r\n\r\n"; 
Console::WriteLine(clientmessage); 

當我嘗試打印出來的消息期運用Console::WriteLine()方法將打印True。我認爲這可能是該方法的問題,也許我需要使用puts(),正如本教程中所做的那樣。 http://www.binarytides.com/winsock-socket-programming-tutorial/

任何幫助表示讚賞。

+0

所以這個調用寫真或其他? –

+2

如果您想使用託管C++(i..e [C++/CLI](https://en.wikipedia.org/wiki/C%2B%2B/CLI)),尤其是需要的.NET函數和類使用.NET類型。 –

+0

yes在控制檯運行時它會打印「True」而不是我想要的確切字符串。 –

回答

2

它看起來像它隱式地將一個非託管指針轉換爲System.Boolean。 爲了使用.NET API,您需要編組參數。在這種情況下,您需要將clientmessage編入System::String^。您可以使用System::Runtime::InteropServices::Marshal::PtrToStringAnsi()方法執行此操作。

char clientmessage[] = "GET/HTTP/1.1\r\n\r\n"; 
System::String^ str = System::Runtime::InteropServices::Marshal::PtrToStringAnsi(static_cast<System::IntPtr>(clientmessage)); 
Console::WriteLine(str); 
+1

或者更好一些:'msclr :: interop :: marshal_as (clientmessage)'(帶'#include < msclr/marshal.h>'),這是在C++/CLI中[統一的字符串轉換方式](https://msdn.microsoft.com/zh-cn/library/bb384865.aspx) –