这对我不起作用:
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新手,请尽可能详细说明。 此致
答案 0 :(得分:0)
msg_ptr = msg+1
那是你的问题。你应该做* msg_ptr ++ *去下一个位置(* msg_len *)。而是将指针更改为指向 msg 字符串中的“a”。
代码中还有2个错误:
您没有考虑字符串的终止'\ 0'。你有1 + 4 + 5 + 1,最后一个是终止'\ 0'。此外,使用字符串时,使用 strncpy ,它处理复制字符串终止符。 memcpy 将完全按照您的要求进行复制。你正在破坏你的筹码。
在最后一行,您必须将字符串打印为数字。使用%s。
以下是Wikipedia关于C字符串和stack overflows的内容。