Memcpy整数缓冲区

时间:2013-02-11 18:33:29

标签: c

所以我有以下内容:

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);

我感到非常困惑,因为当我在最后打印时,预期值与之前打印的网络rin值相同,但事实并非如此,因为它随着每次运行而不断变化。现在我知道我应该使用sizeof或者其他什么,但我们被告知只需使用硬编码值4来表示uint32而不是。当我试图从缓冲区显示联网的rin号时,我被困住了为什么我会得到垃圾。

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

RIN 60
Networked rin: 1006632960
L5: loller cats 16375984


RIN 60
Networked rin: 1006632960
L5: loller cats 10260656

我确信这很简单但我却看不到它。

2 个答案:

答案 0 :(得分:4)

buffer+160不是您要寻找的价值 buffer+160int 指针 ,而非int本身。

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

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

答案 1 :(得分:1)

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

buffer+160是指向char的指针,因此您正在打印地址