我遇到了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