C++中使用函数复制字符到数组出现C2664编译错误求助
问题解决:C2664 类型不匹配错误
错误根源
你的代码存在三个核心问题:
- 函数声明与定义不匹配:头文件
Function.h里声明的copyArray接收两个char类型参数,但Main.cpp里的定义实际接收两个字符数组,编译器以头文件声明为准,导致传参时类型不匹配。 - 函数调用语法错误:
auther.cpp里直接在函数参数中定义数组char myArray[50],这不符合C++语法规范。 - 复制逻辑不严谨:固定循环50次会复制字符串结束符后的垃圾数据,且未给目标数组添加结束符,导致目标数组不是合法的C风格字符串。
修正后的代码
1. 修正 Function.h
void copyArray(char word[], char temp[]);
2. 优化 Main.cpp 中的函数定义
void copyArray(char word[], char temp[]) { int i = 0; // 复制到字符串结束符为止 while (word[i] != '\0') { temp[i] = word[i]; i++; } // 给目标数组添加字符串结束符 temp[i] = '\0'; }
3. 修正 auther.cpp 中的调用逻辑
char myArray[50]; // 先声明数组 copyArray("CHAMPAGNE", myArray); // 传递数组名
关键说明
- 函数声明必须与定义的参数完全一致,编译器才会正确识别函数签名。
- 传递数组时,直接写数组名即可,数组名会隐式转换为指向首元素的指针。
- 复制C风格字符串时,必须以
'\0'作为结束标志,否则无法正确识别字符串边界。
内容的提问来源于stack exchange,提问作者euhjs
相关产品推荐
相关产品推荐

