C\C++ 字符问题

来源:百度知道 编辑:UC知道 时间:2024/07/03 03:50:16
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;

char* kk(char *a,char *b)
{
char ch[10];
ch[0]='\0';
strcat(ch,a);
strcat(ch,b);
cout<<ch<<endl; // 这里可以输出正确的结果
return &ch[0];
}
void main()
{
char *p=kk("an","bn");
cout<<p<<endl; // 为什么这里却不行了
}

在char* kk(char *a,char *b) 定义的 ch[10]在函数kk结束时,ch超出他的作用域,内存被清空。 所以,char *p指向的是一片被清空的内存。这样输出的结果是未定义的。

如果想要保持这片内存,需要在函数kk()内手动为ch申请内存,并在main中手动释放这些内存。 简单修改如下:

#include <stdio.h>
#include <iostream>

using namespace std;
char* kk(char *a,char *b)
{
char *ch = new char[10]; //c++的new操作符或是使用c的方式:malloc
strcpy(ch,"");

strcat(ch,a);
strcat(ch,b);
cout<<ch<<endl;
return ch; // &ch[0] 和 ch 没有区别
}

void main()
{
char *p=kk("an","bn");
cout<<p<<endl;
delete(p); // 清空内存。 delete和new配对,或是c风格malloc和free
}