gpt4 book ai didi

c - memcpy() 似乎不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:05 24 4
gpt4 key购买 nike

我在使用 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 ""

我哪里出错了?

谢谢!

最佳答案

当您指定 %s 时,printf 需要一个以 null 结尾的字符串。它不能告诉您您分配了 18 个字节并且您想要打印这些字节的内容。它查看 *str,看到一个空字节,然后停止查找。

关于c - memcpy() 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com