解题思路:
省事的方法有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 人评分
简单的a+b (C语言代码)浏览:493 |
简单编码 (C++代码)浏览:678 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:868 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:744 |
陈教主的三角形 (C语言代码)浏览:1143 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:470 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:719 |
C语言程序设计教程(第三版)课后习题9.2 (C语言代码)浏览:610 |
1005答案错误为什么浏览:1975 |
C二级辅导-计负均正 (C语言代码)浏览:640 |