У меня возникли проблемы с 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 также ожидает строку с нулевым завершением. – user2357112
@ ^: Тогда, как я могу увидеть, что там в памяти? Я думаю, я не могу использовать str, поскольку это char * – hdnivara