gpt4 book ai didi

c - 使用 memcpy 复制作为参数传递的数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:12 26 4
gpt4 key购买 nike

我想将一些在函数中作为参数传递的字符数组的内容复制到另一个字符数组。所以我将这些数组作为指针传递(通过引用传递)。然后我使用 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;
}

当我将 memcpy 替换为 strcpy 时,复制操作成功:

最佳答案

声明

memcpy(target,source, strlen(source))

应该复制字符串的所有字符。但是,它会在复制标记字符串结尾的 0 字节之前停止。所以你复制的不会是一个字符串。如果您在新副本 (target) 上调用任何字符串函数,这将是一个问题,基本上如果您以任何方式使用 target,您将离开终点,因为终点现在没有标记。可能你会获取一些额外的字节,任何在 target 之后恰好在内存中的东西,最坏的情况是你编程 segfalts 如果它行进足够远而没有找到 0。函数 strcpy 将复制 0 字节, 我通常使用

snprintf(target, sizeof target,  "%s", source); 

因为它不会写入超过目标缓冲区的末尾,并且它总是为 0 腾出空间,以防止在下一个字符串操作中出现问题。

关于c - 使用 memcpy 复制作为参数传递的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30698580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com