我遇到了memcpy()的问题,而且我对我出错的地方没有线索。memcpy()似乎没有工作
代码可以在这里看到:http://pastebin.com/tebksExR
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct tmp__ {
unsigned int num;
unsigned short id;
unsigned short type;
} tmp_str;
int
main(int argc, char **argv)
{
tmp_str hdr;
char *str = NULL;
str = calloc(18, sizeof(char));
memset(&hdr, 0, sizeof(hdr));
hdr.num = 0;
hdr.id = 0;
hdr.type = 21845;
memcpy((void *) str, (void *) &hdr, sizeof(hdr));
printf("STR: %s\n", str);
free(str);
return 0;
}
上执行它,我看到的只是 “STR”。 str指向的内存区域也没有任何东西可见。
(gdb) b 23
Breakpoint 1 at 0x8048494: file memcpy.c, line 23.
(gdb) run
Starting program: /home/a.out
Breakpoint 1, main (argc=1, argv=0xbffff234) at memcpy.c:23
23 memcpy((void *) str, (void *) &hdr, sizeof(hdr));
(gdb) n
24 printf("STR: %s\n", str);
(gdb) n
STR:
26 free(str);
(gdb) info locals
hdr = {num = 0, id = 0, type = 21845}
str = 0x804b008 ""
我哪里错了?
谢谢!
是的,这是正确的,但为什么由str指出的内存区域为空(在gdb跟踪中)? – hdnivara
@ F430:因为GDB也期待一个以null结尾的字符串。 – user2357112
@ ^:那我怎么能看到内存里有什么?我想我不能使用str,因为它是一个char * – hdnivara