对于我的网络课程,我们正在构建一个基于 UDP 协议的 bittorrent 客户端,这非常酷,但由于某些原因,我在使用 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 是一个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 循环,数组中的每个点都包含相同的字符串值。
我不知道为什么会发生这种情况,我真的很想了解从帖子的开头到结尾,数组的内容如何变化,即使我通过循环的每次迭代来验证它们,该循环在一个数据包中读取时间。