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

时间:2014-06-13 07:35:12

标签: c memcpy

使用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);

2 个答案:

答案 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 (一个空字节)。