gpt4 book ai didi

c - memcpy uint32_t 和 char* 转换为 char*

转载 作者:行者123 更新时间:2023-11-30 19:49:47 24 4
gpt4 key购买 nike

这对我不起作用:

char buff[11];
char* msg_ptr;
msg_ptr = buff;
uint8_t id;
uint32_t msg_length;
char msg[] = "hallo";
id = 77;
msg_length = 5;

memcpy(buff, &id, sizeof(uint8_t));
memcpy(buff+1, &msg_length, sizeof(uint32_t));
strcpy(buff+5, msg);


printf("id :%d\n",*(uint8_t*)msg_ptr);
msg_ptr++;

printf("msg_length: %d\n", *msg_ptr);

msg_ptr++;
printf("msg: %s\n", msg_ptr);

Id 和 msg_lentgh 显示在 konsole 上,但之后我遇到段错误。我是C语言新手,请尽可能详细。问候

最佳答案

msg_ptr = msg+1

那是你的问题。您应该执行 *msg_ptr++* 转到下一个位置(即 *msg_len*)。相反,您将指针更改为指向 msg 字符串中的“a”。

代码中还有 2 个错误:

  • 您没有考虑字符串的终止符“\0”。你有 1 + 4 + 5 + 1,最后一个是终止符 '\0'。另外,在处理字符串时,请使用 strncpy,它可以处理字符串终止符的复制。 memcpy 将完全按照您的要求进行复制。你正在破坏你的堆栈。

  • 在最后一行,您必须将字符串打印为数字。使用%s。

这就是 Wikipedia不得不说一下 C 字符串和 stack overflows当你在做的时候。

关于c - memcpy uint32_t 和 char* 转换为 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638426/

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