0

私は C で非常に基本的なサーバーを実装しようとしています。その一部は HTTP ヘッダーを構築しています。これを行うために、基本的にヘッダーを構築する header_builder というクラスを作成しました。このクラスの最も基本的なメソッドの 1 つは、次に示す append_header_line です。

void append_header_line( const char *line, char *hdr ) {
  printf("Adding header line\n");
  strcat( hdr, line );
  printf("Line added. Adding ending.\n");
  strcat( hdr, "\r\n" );  
  printf("Success\n");
}   

「hdr」パラメータの最後に「line」パラメータを追加し、最後に「\r\n」を追加するだけです。問題は、最初の strcat 呼び出しが終了しないことです。このコードを実行すると、次のように言うだけです。

ヘッダー行の追加

つまり、次の行は決して実行されず、その理由がわかりません。何かご意見は?

4

4 に答える 4

1

hdrおよび/またはline適切にゼロ終端されていないためstrcat、範囲外になるまで実行されます。

于 2012-12-07T22:53:30.010 に答える
1

おそらく、関数が呼び出されたときに and の一方 (または両方) がhdrヌルline終了 C 文字列ではありません。hdr特に、最初のヘッダーを追加する前に、 で空の文字列に初期化する必要があることを忘れないでくださいhdr[0] = 0;

于 2012-12-07T22:54:27.330 に答える
0

strcatは、宛先にnull文字を必要とします。これにより、宛先の最初の文字がソースの最初の文字に置き換えられます。hdrが正しく初期化されているかどうかを確認します。 http://www.cplusplus.com/reference/cstring/strcat/

于 2012-12-07T23:02:09.863 に答える
0

文字列の 1 つに null ターミネータがないと思います。

于 2012-12-07T22:53:44.573 に答える