簡體   English   中英

將std :: string復制到char *(用於TCP / IP套接字)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM