我在使用 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 中的缓冲区),您的空格将分别被 Valueb 和 ValueC 中可用的 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/