如何解决如何使用 void 函数复制数组?
这是一个简单的密码破解游戏的片段。在这篇文章中,该程序旨在比较隐藏列表和猜测以找到“不完美的匹配”,例如具有正确编号但位于错误位置的匹配。例如,如果隐藏列表是:
12321
我的猜测是:
13222
应该说我有 2 个完美匹配和 2 个不完美匹配。我真的在努力让我的嵌套循环“忽略”已经发现的不完美匹配或完美匹配(因为它们是在不同的函数中计算的)。我知道我需要创建数组的副本,但我不知道如何使用提供的函数来做到这一点。请帮忙,我真的迷路了。
int ImperfectMatches(int hidelist[],int guess[],int length) {
int i,j;
int imperfectsum;
for(i = 0; i < length; i++){
for(j = 0; j < length; j++){
if(hidelist[i] == guess[j]){
}
}
}
return imperfectsum;
}
void copyArray(int dest[],int source[],int length) {
return;
}
解决方法
如果您可以假设为 dest
分配了足够的内存来容纳 source
整数的 length
,那么您需要做的就是调用 memcpy。
memcpy(dest,source,sizeof(*dest) * length);
如果 dest
和 source
可以重叠,则不能使用 memcpy
。相反,如果您想要一个标准函数,您应该使用 memmove(这意味着代码应该在编译器遵循标准的所有平台上编译)。
memmove(dest,sizeof(*dest) * length);
如果 dest
未分配,则您必须修改函数以返回目标地址或修改函数的参数以传递目标数组地址的地址(即,将 dest 定义为int **dest
),然后使用 malloc 为 *dest
分配一个值。
int * copyArray(int source[],int length) {
int * dest = malloc(sizeof(*dest) * length);
if (dest == NULL)
return NULL;
memcpy(dest,sizeof(*dest) * length); // no overlap possible
return dest;
}
而且,正如 Eric(和其他人多次)指出的那样,如果您使用 sizeof(*dest)
而不是 sizeof(int)
,那么您将不必修改事件中的 sizeof
表达式copyArray
的原型发生了变化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。