0

シンプルな POST http サーバーを実行するために libevent を使用していますが、奇妙な問題を見つけました - evbuffer_copyout が *data に書き込み、オーバーヘッドのあるデータを送信しました (毎回変更されます)。コードでわかるように、不要なシンボルをカットして修正しましたが、正しい解決策のようには見えません。ここで私は受け取ります: ここに画像の説明を入力

以下はコールバックのコードです:

size_t len = evbuffer_get_length(evhttp_request_get_input_buffer(r));
struct evbuffer *in_evb = evhttp_request_get_input_buffer(r);

size_t lenBuffer = evbuffer_get_length(in_evb);

char *data = malloc(len);
evbuffer_remove(in_evb, data, len);
NSString *final = [NSString stringWithCString:data encoding:NSASCIIStringEncoding];
NSString *finalFinal = [final substringWithRange:NSMakeRange(0, len)];

NSLog(@"==>lenBuffer:%zu len:%zu data:%@",lenBuffer,len,finalFinal);
evhttp_add_header(evhttp_request_get_output_headers(r),
                  "Content-Type", "text/html");
evhttp_send_reply(r, 200, "OK", in_evb);
free(data);
4

1 に答える 1

1

malloc を使用してメモリを割り当てると、ガベージがいっぱいになります。このメモリを有用なデータで埋めますが、おそらく文字列ターミネータ文字 '\0' は含まれていません。そのため、デバッガはバッファから取得されたデータにゴミを付けて表示します。

于 2012-08-15T14:59:25.737 に答える