所以我有以下内容:
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
我确信这很简单但我却看不到它。
答案 0 :(得分:4)
buffer+160
不是您要寻找的价值
buffer+160
是int
的 指针 ,而非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
的指针,因此您正在打印地址。