我想将函数中作为参数传递的一些char数组的内容复制到另一个char-arrays。所以我将这些数组作为指针传递(通过引用传递)。然后我使用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时,复制操作成功:
答案 0 :(得分:0)
声明
memcpy(target,source, strlen(source))
应该复制字符串的所有字符。但是,它将停止复制标记字符串结尾的0字节。所以你复制的不是字符串。如果您在新副本(目标)上调用任何字符串函数,这将是一个问题,如果您以任何方式使用目标,基本上,您将走到最后,因为结束现在没有标记。可能你会选择一些额外的字节,在 target 之后发生在内存中的任何事情,最坏的情况是你编程segfalts如果它行进得足够远而没有找到0.函数strcpy将复制0字节,我通常使用
snprintf(target, sizeof target, "%s", source);
因为它没有写入目标缓冲区的末尾,并且它总是为0提供空间,所以在下一个字符串op中防止出现问题。