gpt4 book ai didi

c - memmove 不复制缓冲区的所有内容 - C

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:34 26 4
gpt4 key购买 nike

我有以下代码,我试图在其中创建一个长度为 7 字节的缓冲区,然后将网络字节顺序中的整数与缓冲区中的 char 数组一起放入,最后我不应该有 Null 字符我的 sprintf() 缓冲区,所以我使用 memcpy() 只复制 7 个字节。但是,我似乎在 memcpy() 之后得到了不同的缓冲区。

代码:

int num = 1234;
char *dummy = "bla";
int dummy_len = strlen(dummy);
int buffer_len = sizeof(int) + dummy_len;
char *buffer = malloc(buffer_len);
char *temp_buf = malloc(buffer_len);
size_t len = buffer_len;

sprintf(temp_buf, "%d%s",htonl(num),dummy); //preparing the temp_buf
memmove(buffer, temp_buf, len);
printf("sizeof(temp_buf) = %d and sizeof(buffer) = %d\n",sizeof(temp_buf), sizeof(buffer));
printf("printing buffer = %s and temp_buf = %s\n", buffer,temp_buf);

我得到以下输出:

sizeof(temp_buf) = 4 and sizeof(buffer) = 4
printing buffer = -771489 and temp_buf = -771489792bla

最佳答案

不需要sprintf,直接copy数据即可。

int temp = htonl(num);
memmove(buffer, &temp, sizeof(temp));
memmove(buffer+sizeof(temp), dummy, strlen(dummy));

关于c - memmove 不复制缓冲区的所有内容 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483925/

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