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 号时会出现垃圾。

例如,我在两次运行程序后收到此输出

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是指向你的指针int,而不是你int自己的指针。

您必须对指针进行类型转换和取消引用才能看到所需的值。

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 回答