gpt4 book ai didi

c - 存储在有一些空格的数组中

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

我在使用 memcpy() 时遇到问题。

我有一个 36 字节的数组。前20位填手机号码,后16位填凭证号。如果手机号码小于 20 那么它应该用空格填充。但是当我填写凭证编号时,它会覆盖第一个值。下面是我的代码。

char tempMobileNo[20],tempVoucherNo[16],o2RecordData[50];
memset(tempMobileNo,' ',20);
memset(tempVoucherNo,' ',16);
memset(o2RecordData,' ',RECORD_DATA_L);
memcpy(tempMobileNo,ValueB,20);
memcpy(tempVoucherNo,ValueC,16);
memcpy(&o2RecordData[0],tempMobileNo,20);
memcpy(&o2RecordData[22],tempVoucherNo,16);

最佳答案

问题

memcpy 以这样的方式实现,您将总是复制指定字节数,它不知道“内容"缓冲区的提前结束以及它是否应因此停止复制,也不关心。

由于您首先用空格填充缓冲区,然后无条件地将指定的长度复制到 (A) 和 (B 中的缓冲区),您的空格将分别被 ValuebValueC 中可用的 20 字节和 16 字节“覆盖”。

 memcpy(tempMobileNo,  ValueB, 20); // (A)      
memcpy(tempVoucherNo, ValueC, 16); // (B)

想法

如果您正在处理 c 风格的字符串(即以 null 结尾的字符串),请考虑使用 strncpy 而不是 memcpy.

strncpy (dst, src, n) 将最多复制 n 个字符,除非它命中src 的结尾(空字节)。

关于c - 存储在有一些空格的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24200008/

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