使用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);
答案 0 :(得分:1)
注意:这篇文章是在OP编辑他的问题之前创建的,它不再具有相关性。
memcpy(&o2RecordData[22],tempVoucherNo,22);
应该是
memcpy(&o2RecordData[20],tempVoucherNo,16);
答案 1 :(得分:1)
memcpy
是以始终复制指定字节数的方式实现的,它不知道&#34 ;内容"缓冲区的结束时间较早,是否因此而停止复制,也不关心。
由于您首先使用空格填充缓冲区,然后无条件地将指定的长度n复制到( A )和( B )中的缓冲区中),你的空间将被覆盖"通过 Valueb 和 ValueC 中分别提供的20和16个字节。
memcpy(tempMobileNo, ValueB, 20); // (A)
memcpy(tempVoucherNo, ValueC, 16); // (B)
如果您正在处理 c样式字符串(即以空字符结尾的字符串),请考虑使用 strncpy
而不是 {{1 }} 强>
memcpy
(一个空字节)。