[英]copying a std::string to a char* (for TCP/IP sockets)
我決定重做這個問題以澄清它,我目前正在一個學校項目中,正在使用TCP / IP套接字創建一個客戶端服務器,現在我對它們相關的問題沒有...。
現在我有一個輔助函數,它將接收一個指向套接字的指針,並將一些數據發送到服務器,它將以我想要的字符的確切格式構建一個std :: string,然后將其轉換為字符數組並將其發送到服務器
buffer = new char[tempBuffer.size()];
cout << tempBuffer.size() << " ++ " << strlen(buffer) << " ++ " << endl;
strcpy(buffer, tempBuffer.c_str());
cout << buffer << " " << tempBuffer.size() << " ++ " << strlen(buffer) << " ++" << endl;
write (*socket, buffer, strlen(buffer));
delete [] buffer;
-tempBuffer是std :: string我在輔助函數中較早構建的,我們不必擔心我知道該部分工作正常
現在,當我在函數main()中運行它時,這一切似乎都可以正常運行,但是我可以在客戶端和服務器之間發送盡可能多的消息,但是當我將其用於UI類並使用它時,我會遇到很長的glibc錯誤為什么會這樣呢?
cout << *buffer << " " << tempBuffer.size() << " ++ " << sizeof(*buffer) << " ++" << endl;
這是錯誤的,原因有兩個。 首先, buffer
不是C樣式的字符串。 這只是任意數據。 因此,您不能將其傳遞給operator << (char *)
(因為它是字符串,它怎么知道要輸出多少字節?)。 其次, sizeof(*buffer)
為1,因為buffer
是一個char *
(它怎么可能知道大小?)。
您必須自己管理大小。 您不能期望operator<<
或sizeof
神奇地知道您關心多少字節。 您不能將buffer
視為字符串,它只是一個字符數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.