c++小问题,麻烦帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/29 06:55:17
#include "stdafx.h"
#include <iostream>
using namespace std;

char *todest;
char *cpy(char *from)
{
char *to=new char[20];
for (;*from!='\0';from++,to++)
*to=*from;
return to;
delete []to;
}

int main(int argc, char* argv[])
{
char a[]="i am a stduent";
char *acpy;
acpy=cpy(a);
cout<<a<<", "<<acpy//这里不是应该用*acpy吗,用acpy不是只输出地址吗?<<endl;
return 0;
}

这是个复制字符窜的小程序,
但运行结果不正确,
为什么呢

cpy函数写错了,你通过new分配的内存首地址必须要保存下来的,否则就没法释放(delete)了.
#include "stdafx.h"
#include <iostream>
using namespace std;

char *todest;
char *cpy(char *from)
{
char *to=new char[20];
char *res=to; //把新分配的内存地址先保存下来,等下要返回的
for (;*from!='\0';from++,to++)
*to=*from;
return res; //这里返回新分配的内存,以及在前面的for循环中初始化了
//delete []to; //不能在这里释放,还没用了,你就先释放了
}

int main(int argc, char* argv[])
{
char a[]="i am a stduent";
char *acpy;
acpy=cpy(a); //acpy指向新分配的内存
cout<<a<<", "<<acpy//这里用acpy,<<操作符会对char *类型作特殊处理,即把它当中一个字符串看待,而不会把地址输出
<<endl;
delete [] acpy;//最后释放在cpy函数中申请的内存,当然在使用之前应该判断acpy是否为NULL
return 0;
}

如果这里使用*acpy的话只会输出一个字符,因为这个指针指向一个字符串,所以直接使用acpy就能输出整个字符串,字符串指针和其他变量指针是不一样的,如果你不理解,只要把字符串指针理解成数组就行了,数组是怎么用的,这种指针就怎么用。

你这个函数问题很多:
1.有很多没问的语句,已给你注释掉
2.cpy函数中,目的字符串to是个局部变量,函数