解题思路:
省事的方法有str.cat()函数,string.append()函数等等,直接一个函数搞定,为了理解原理我还是用了for循环,即把str2[ ]的字符一个个放到str1[ ]的后面。
注意事项:
本题主要的意义是一个报错:warning :address of local variable returned。
我一开始写的函数是:创一个char数组,把两个char数组放进去,然后返回这个char数组的指针,虽然没有报错,但报了上述警告,而且什么都没输出。
该警告的意思是:不能在函数中返回一个局部变量的地址。专业化解释是:字符串字面量是存储在静态存储区的,函数结束也不会被释放,但是使用char数组的时候,会在栈区新建一个备份,所以在函数结束时就被自动被销毁了(返回的是一个地址,但是在这个函数结束的时候,这个地址指向的那块内存空间放置的内容被释放了,所以通过那个返回的地址已经找不到那块地址对应的内容了),所以肯定是不对的(静态申请内存的变量不能跨函数使用)。
因此没有正常输出也就很好理解了。如果想要返回新数组指针,一个方法是把它定义成字面值,比如char str[] = "Hello World"(本题没法用),另一个方法是把它存入静态存储区(堆区),即用malloc()分配空间,不过要记得释放。
参考代码:
#include <iostream> #include <cstring> using namespace std; const int maxSize = 20; //合并后的数组最大长度 char *mergeStr(char *str1, char *str2); int main() { char str1[maxSize]; char str2[maxSize]; cin >> str1 >> str2; cout << mergeStr(str1, str2) << endl; return 0; } char *mergeStr(char *str1, char *str2) { //如果新建一个char数组存放合并的字符串,再返回新数组的指针,会警告“不能在函数中返回一个局部变量的地址” int len1 = strlen(str1); int len2 = strlen(str2); //直接使用strcat()函数也行,甚至string.append()应该也行 for(int i = 0; i < len2; i++) { str1[len1 + i] = str2[i]; } return str1; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复