我決定重做這個問題來澄清它, 我目前正在使用TCP/IP套接字創建客戶端服務器,現在我沒有與這些相關的問題....將std :: string複製到char *(對於TCP/IP套接字)
現在我有一個輔助功能,它將在一個指針到套接字和一些數據我將發送到服務器,它會建立一個std ::字符串中的格式正是我想要的字符,然後將其轉換爲字符數組,並將其發送到服務器
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 ::〜應變gi在助手函數的早期構建,我們不需要擔心,我知道那部分工作正常
現在這一切似乎工作完美時,我運行它在我的功能main()我可以發送儘可能多的客戶端和服務器,因爲我想但是當我使用它到一個UI類並使用它時,我得到一個非常長的glibc錯誤,爲什麼會這樣呢?
如果你正在爲數據傳輸準備一個緩衝區,而你不*使用'std :: vector'和一些非常細緻的序列化(或者只是使用序列化庫)足夠深。你不想發送格式化的數據;你想發送* raw *數據,以特定的形式爲它重建客戶端。序列化協議有很好的理由,你可以考慮它們。 –
WhozCraig
爲什麼不直接在''write'中直接使用'.c_str()'? 'write(* socket,tempBuffer.c_str(),tempBuffer.size());'看起來很容易... –