gpt4 book ai didi

c - 第二个 memcpy() 将之前的 memcpy() 数组附加到它

转载 作者:行者123 更新时间:2023-12-05 00:03:19 28 4
gpt4 key购买 nike

我在使用 memcpy() 时遇到了一点问题

当我写这篇文章时

char ipA[15], ipB[15];
size_t b = 15;
memcpy(ipA,line+15,b);

它从数组 line 的第 15 个元素开始复制 b 个字节(很好,这就是我想要的)

memcpy(ipB,line+31,b);

这将从第 31 个元素开始的行复制 b 个字节,它还会附加上一个命令的结果,即 ipA

为什么? ipB 大小为 15,因此它应该没有足够的空间来复制任何其他内容。这里发生了什么?

  • ipA 的结果是 192.168.123.123
  • ipB 的结果变为 205.123.123.122 192.168.123.123

我哪里错了?我实际上不太了解 C 中的内存分配。

最佳答案

看起来您没有以 null 终止 ipA 中的字符串。编译器已将这两个变量并排放置在内存中,因此字符串操作假定第一个空终止符位于第二个数组之后的某个时间(每当内存中出现下一个 0 时)。

尝试:

char ipA[16], ipB[16];
size_t b = 15;
memcpy(ipA,line+15,b);
ipA[15] = '\0';
memcpy(ipB,line+31,b);
ipB[15] = '\0';
printf("ipA: %s\nipB: %s\n", ipA, ipB)

这应该可以确认是否是这个问题。显然,您可以使代码比我上面的测试代码更优雅。作为手动终止的替代方法,您可以使用 printf("%.*s\n", b, ipA); 或类似的方法来强制 printf 打印正确的字符数。

关于c - 第二个 memcpy() 将之前的 memcpy() 数组附加到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4990531/

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