1

私はそれを明確にするために質問をやり直すことにしました。私は現在、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 エラーが発生しますこれはなぜでしょう?

4

1 に答える 1

2
cout << *buffer << "  " << tempBuffer.size() << " ++ " << sizeof(*buffer) << " ++" << endl;

これは 2 つの理由で間違っています。まず、bufferは C スタイルの文字列ではありません。それは単なる任意のデータです。そのため、に渡すことはできませんoperator << (char *)(これは文字列用であるため、出力するバイト数をどのように知るのでしょうか?)。2 番目sizeof(*buffer)は 1bufferですchar *

サイズは自分で管理する必要があります。気になるバイト数を期待しoperator<<たり、魔法のように知ることはできません。文字列としてsizeof扱うことはできません。これは単なる文字の配列です。buffer

于 2013-11-03T10:03:16.723 に答える