char* name[4];
int j=0;
while(cin.getline(name[j],80))//input given:you(ent)me(ent)he(ent)she
cout<<name[j++];
这段代码只读取一个字符串直到一个换行符。它不会读取所有4个字符串并打印它们吗?这是使用getline输入字符串的好方法吗?
答案 0 :(得分:4)
问题:您没有正确分配内存。您正在声明一个指针数组,而不是c样式字符串数组。
可能的解决方案:您需要先阅读指针和内存分配。您可以使用以下代码首先将内存分配给您声明为name[0]
,name[1]
,name[2]
和name[3]
的四个指针中的每一个:
char* name[4];
for (int i = 0; i < 4; i++)
{
name[i] = new char[80];
}
或者您可以使用下面发布代码的2D数组:
char name[4][80];
int j=0;
while(j<4 && cin.getline(name[j],80))
{
cout<<name[j++];
}
答案 1 :(得分:1)
我做了一些修正。它可以在我的电脑上运行。
char* name[4];
for (int i = 0; i < 4; i++)
name[i] = new char[80];
int j = 0;
while (j < 4)
{
cin.getline(name[j], 80); //input given:you(ent)me(ent)he(ent)she
cout << name[j++] << endl;
}
答案 2 :(得分:1)
我猜你需要阅读更多关于C ++指针,数组和内存管理的内容。您尝试对C字符串数组进行操作,但未正确初始化它。在使用这些指针之前,需要分配内存。目前你的课程成绩为UB,所以你真的很幸运,它做了同样的事情。
另一个问题是,当你到达输入的末尾时,当j = 4时,你仍然会尝试执行cin(getline(name[j], 80)
,但是你将名称[4]作为参数传递,这可能是一个即使您事先正确分配了内存,也会导致另一个UB的原因。
除此之外,您正在使用C ++编写,因此请使用C ++字符串和向量而不是C数组。
使用字符串和std :: getline:
可以轻松完成#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<string> names;
string name;
while(getline(cin, name)){
names.push_back(name);
cout<<name<<endl;
}
return 0;
}