C++指针问题 在线等

来源:百度知道 编辑:UC知道 时间:2024/05/14 20:02:15
#include <iostream>
using namespace std;

void copy(const char *Sentence1, char * Sentence2)
{
for (int i = 0; Sentence1[i] != '\0';i++ )
Sentence2[i] = Sentence1[i];

Sentence2[i+1] ='\0';
}

int main()
{
char *sentence1 = "southeast";
char *sentence2="";

copy(sentence1,sentence2);

cout << sentence2 << endl;
return 0;
}
为什么上面的main函数中的sentence2是指针是就运行不过,而是字符串数组的时候就可以呢?哪位高手可以给点详细的指点呢?

字符指针一般用作定义字符串常量

可以这样:

char*sentence1="HelloWorld";
char*sentence2=new char [20];
copy(sentence1,sentence2);
cout<<sentence2<<endl;
delete[]sentence2;//释放空间,必须有!
return 0;

唔...我这里运行直接报错...
貌似你没有给sentence2开辟空间嘛...
char *sentence2 = new char[strlen(sentence1)+1];

如果是你那样写,sentence2就只是一个指针,只管理一个地址.而你的copy操作就直接越界,非法访问内存了

Sentence2[i] ='\0'; //不用i+1

char *sentence2="";
需要内存空间
直接定义成数组吧char sentence2[100];

char *sentence2="";这样定义 是把其指向内容定义成常量 不可以修改 所以你copy函数执行时会错误
char *sentence2;
char *sentence2 = new char[20];
这样在使用就好了 动态开辟空间