我希望将某些字符数组的内容作为函数中的参数传递到另一个字符数组中。因此,我将这些数组作为指针传递(通过引用传递)。然后,我使用memcpy将这些数组的内容复制到其他数组。但是复制过程并不太精确,尽管我认为我正确地使用了memcpy。一些字符被删除,而一些新字符出现。然后我尝试使用strcpy,因此正确地复制了这些数组的内容。因此,我想了解为什么在使用memcpy时复制过程失败。以下是我的一些代码:
struct student{
bool statusFlag;
char lastname[20];
char firstname[20];
int mNr;
};以下是一种方法:
struct student getData(char * lastname, char * firstname, int matNr){
struct student st;
int i;
printf("%s\n",lastname);
if(insertCounter<=size){
//get data
st.statusFlag=1;
memcpy(st.lastname,lastname,strlen(lastname));
memcpy(st.firstname,firstname,strlen(firstname));
st.mNr=matNr;
printf("%s,%s,%d\n",st.lastname,st.firstname,st.mNr);
return st;
}else if(insertCounter>size){
st.statusFlag=0;
return st;
} 当我用strcpy替换memcpy时,复制操作是成功的:
发布于 2015-06-08 01:10:58
声明
memcpy(target,source, strlen(source))应该复制字符串的所有字符。但是,它将停止复制标记字符串结束的0字节。所以你复制的不会是字符串。如果您调用新拷贝(目标)上的任何字符串函数,这将是一个问题,如果以任何方式使用target,则会从末尾前进,因为结束现在是未标记的。可能你会捡到一些额外的字节,任何碰巧在内存中的东西,如果你的程序在没有找到0的情况下走得够远的话,最坏的情况是你编写的片段会出错。函数strcpy将复制0字节,我通常使用
snprintf(target, sizeof target, "%s", source); 因为它没有写过目标缓冲区的末尾,而且它总是为0腾出空间,防止下一个字符串op中出现故障。
https://stackoverflow.com/questions/30698580
复制相似问题