注册 登录
编程论坛 C++教室

谁能深入讲解一下这个程序为什么会崩溃

xtayaitak 发布于 2010-11-08 19:15, 1509 次点击
程序代码:
#include <iostream>
using namespace std;

int main()
{
    char *p;//声明一个字符串
    cout<<"请输入一个字符串"<<endl;
    cin>>p; //输入一个字符串
    cout<<p<<endl;
    return 0;
}
17 回复
#2
pangding2010-11-08 20:04
你有没有自己的见解,说说看?
#3
ou11112010-11-09 08:22
额。。。。字符串应该用字符数组来表示的吧,你声明的只有字符指针,
  char *p,ch[20];
  p=ch;
#4
xtayaitak2010-11-09 10:17
*p可以指向一段字符,为什么不能给他用 cin赋值呢?
#5
ou11112010-11-09 10:46
可是你只是声明一指针变量,没声明它指向哪呀
#6
ljt2010-11-09 13:42
大哥,你有给p分配空间吗?
#include <iostream>
using namespace std;

int main()
{
    char *p=new char[10];//声明一个字符串
    cout<<"请输入一个字符串"<<endl;
    cin>>p; //输入一个字符串
    cout<<p<<endl;
    delete p;
    return 0;
}

[ 本帖最后由 ljt 于 2010-11-9 17:21 编辑 ]
#7
missiyou2010-11-09 13:42
char *p;
下面定义
int a[100];
说明你输入的没有空间给你存储了
#8
zhanghang1232010-11-10 13:59
cin>>p;中p代表指针,不能表示字符串吧,字符串的输入输出最好借助于数组。
#9
kingsroot2010-11-10 14:19
#include <iostream>
using namespace std;

int main()
{
    char *p;//声明一个字符串   这里是个野指针!指向随机的地址,运气好指向堆里面的指针  可能还不得出问题 运气差 直接指向一个非法地址  程序就蹦了
    cout<<"请输入一个字符串"<<endl;
    cin>>p; //输入一个字符串
    cout<<p<<endl;
    return 0;
}
#10
平常心飞儿2010-11-12 19:59
没有分配空间,会造成内存紊乱。

很严重的哦,因为做的大程序,像这种小问题很难发现错误。
#11
itkuko2010-11-12 21:39
要么new一个大小,不过用完后要delete,要么直接定义一个char数组
#12
八画小子2010-11-13 01:30
回复 6楼 ljt
这位大哥,人家确实是给P分配了地址,这一点你弄错了。没有分配地址的是P中应该存储的那个地址。
#13
八画小子2010-11-13 01:37
回复 楼主 xtayaitak
楼主可能是犯了一些最基本的错误。首先要说一下*操作符,在楼主使用的这个地方,*的被称为是解除应用,因为*后面的那个指针变量里面存储的是个另外一个内存单元的地址。C++中为我们提供指针变量是方便我们对内存单元进行操作。cin是istream类的一个对象,之后的>>操作符被重载了,后面应该继续的是一个可被输入的内置类型的对象,而不是一个指针。
#14
向钱看2010-11-13 21:45
很深奥
#15
八画小子2010-11-13 22:37
只要稍稍看过C++的类和继承,就很容易理解了
#16
qinqinwsq2010-11-15 09:43
应该给指针分配内存
#17
xtayaitak2010-11-16 15:36
学习了
#18
hhaiqin2010-11-22 22:50
char* p可以指向ASCII码,输出结果是一个整形数据。
1