私のネットワーキングクラスでは、UDPプロトコルに基づいてビットトレントクライアントを構築しています。これはかなりクールですが、何らかの理由でC文字列に多くの問題があります。
初めてパケットを受信するときは、次のようにします。
if(server_data == NULL){
server_data = malloc(one_block.total_blocks*sizeof(char*));
int i;
for(i = 0; i < one_block.total_blocks; i++){
server_data[i] = malloc(sizeof(char*));
server_data[i] = "";
}
}
ここで、server_dataはaでchar**
あり、one_blockはstruct
パケット情報とペイロードを保持します。
次に私はします:
server_data[one_block.which_block] = one_block.payload;
blocks_rcv++;
if(blocks_rcv == one_block.total_blocks-1)
done = TRUE; //macro
if(done){
int i;
for(i = 0; i < one_block.total_blocks; i++){
printf("%s", server_data[i];
}
}
すべてが順調でダンディに見えますが、すべてのパケットが受信される前にserver_dataの内容を印刷すると、なんらかの理由で、各パケットから異なるデータが表示されます。その後、done = TRUEを設定し、そのforループに入ると、配列内のすべてのスポットに同じ文字列値が含まれます。
なぜこれが起こっているのかわかりません。投稿の最初から最後まで、配列の内容がどのように変化するかを本当に理解したいと思います。時間。