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

帮我看一下这个问题:关于同时输入两个字符串的问题。

wenxinwukui 发布于 2011-02-21 16:04, 1535 次点击
大家帮忙看一下下面这段代码,编译通过,输入两个字符串后出错,请大家帮忙解释一下原因和怎样修改,谢谢!
说明:不想限制字符串a和b的最大长度,同时输入两个字符数组。

int main(){
    char* a;
    char* b;
    cin>> a >> b;
    cout << a << " " << b<<endl;
}
13 回复
#2
rjsp2011-02-21 16:55
我拿了一个纸条,在纸条上写了一个人的地址
给你这个纸条,让你把邮件发送到这个地址处


我拿了一个纸条,未曾在纸条上写下地址
给你这个纸条,让你把邮件发送到这个地址处
#3
kspliusa2011-02-21 17:46
么有为a,b申请内存!
#4
qq10235692232011-02-21 18:20
因为每个输入的东西都可以是字符,而你的长度又没有限制,所以你这样只能输入字符串a.
你要用一种办法分开a,b的输入。
#5
homelove2011-02-22 16:51
首先要为a b 分配足够大的内存,比如a b 都不超过100个字符。其次输入时,字符串用空格或者换行符隔开
以下程序在vc6或vs2008通过:
程序代码:
#include <iostream>
using namespace std;

int main(){
    char* a=new char[100];
    char* b=new char[100];
    cin>> a;
    cin>> b;
    cout << a << " " << b<<endl;
}

 
#6
biancku2011-02-22 19:45
定义指针时,一定要注意对其进行初始化,你的程序虽然定义了指针但指针指向不明,编译,链接都能通过,但运行时*a,*b可能指向内存中某些
重要的地方,因此运行时出现某某地址错误。你可以采用楼上的写法,或者直接就定义一个数组,让指针在指向数组。
#7
闭眼到天黑2011-02-22 21:10
指针不能直接赋字面值常量,只能赋给地址或者动态创建对象,或者赋0!
#8
闭眼到天黑2011-02-22 21:18
#include<iostream>
using namespace std;
int main(){
    char d;
    char e;
    char* a=&d;
    char* b=&e;
    cin>>d>>e;
    cout <<*a<<" "<<*b<<endl;
}
这样写就能达到你的要求!
#9
wtyp174012011-02-23 05:56
有没有高手愿意收徒弟的呀 有的话联系我QQ523979288
#10
pangding2011-02-23 19:58
基本上就是 5楼 说的原因。
#11
format1232011-02-23 21:27
要不限制长度,用string


#include "string"
#include "iostream"
using namespace std;

int main(){
    string a;
    string b;
    cin>> a >> b;
    cout << a << " " << b<<endl;
}
#12
wenxinwukui2011-02-24 15:06
多谢楼上各位的指导,我明白的了大概原因是这样的,编译器为第一个字符串(a)分配了地址,这样的话当输入第一个字符串时可以从a开始输入任意多个。由于第一个字符串的大小不确定,所以没法给第二个字符串分配起始地址,所以就会报错。
#13
gsdgold2011-02-28 22:49
没有分配内存
#14
dengjinbao2011-03-23 00:09
用 string类啊
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1,str2;
    cin>>str1;
    cin>>str2;
    cout<<str1<<endl;
    cout<<str2<<endl;
return 0;
}
1