1

だから私は次のことをしています:

char * buffer = (char *) malloc(2*80 + 4);
uint32_t networkedRin = htonl(student->rin);

printf("RIN %u\n", student->rin);

//Clear all memory and copy the first last and rin into the new buffer
memset(buffer, '\0', 164);
memcpy(buffer, student->firstname, 80);
memcpy(buffer+80, student->lastname, 80);
memcpy(buffer+160, &networkedRin, 4);

printf("Networked rin: %u\n", networkedRin);

printf("L5: %s %s %u\n", buffer, buffer+80, buffer+160);

最後に印刷を行うと、期待値は以前に印刷されたNetworked rin値と同じですが、実行ごとに絶えず変化するため、実際にはゴミではないため、非常に混乱しています。これで、sizeofなどを使用する必要があることがわかりましたが、uint32にはハードコードされた値4を使用するように指示されましたが、そうではありません。バッファからネットワーク化されたrin番号を表示しようとすると、なぜガベージが発生するのかわからなくなっています。

たとえば、プログラムを2回実行した後、この出力を受け取ります

RIN 60
Networked rin: 1006632960
L5: loller cats 16375984


RIN 60
Networked rin: 1006632960
L5: loller cats 10260656

簡単なことだと思いますが、見えません。

4

2 に答える 2

4

buffer+160あなたが探している価値ではありません。
buffer+160は、自分自身ではなく、自分へのポインタです。intint

必要な値を表示するには、ポインターを型キャストして参照解除する必要があります。

printf("L5: %s %s %u\n", buffer, buffer+80, *(uint32_t*)(buffer+160));
于 2013-02-11T18:36:32.187 に答える
1
printf("L5: %s %s %u\n", buffer, buffer+80, buffer+160);

buffer+160はへのポインタなcharので、アドレスを出力しています。

于 2013-02-11T18:38:40.067 に答える