char ** ptr = new char *[3];
ptr[0] = new char [5];
ptr[1] = new char [6];
ptr[2] = new char [7];
cout<<"Enter first array: ";
cin.getline(ptr[0], 5);
cin.getline(ptr[1], 6);
cin.getline(ptr[2], 7);
for (int i=0; i<3; i++){
cout<<ptr+i<<endl;
}
for (int i=0; i<3; i++){
delete[] ptr[i];
}
当我运行此代码时,它会提供以下输出:
Enter first array: name
0xf99c20
0xf99c28
0xf99c30
我实际上想要打印出用户输入。
有人可以告诉我该怎么做吗?
答案 0 :(得分:0)
ptr+i
的类型是char**
,而不是char*
,因此只是作为指针打印。要将其打印为字符串,请使用ptr[i]
,char*
。
那就是说,使用std::vector<std::string>
。然后你可以使用string
version of std::getline
。然后,您可以避免在匹配new
和delete
,泄漏,处理更长的用户输入,处理不同数量的用户输入行等方面出现许多可能的问题。
此外,请重新考虑您对通常被视为不良做法的使用:using namespace std;
和endl
(这些是解释的链接)。
答案 1 :(得分:0)
当您打印ptr+i
时,您对指针概念存在逻辑误解,它会为您提供输入在内存中的实际地址位置
打印您可以使用的指针值:
*(ptr+i)
或:
ptr[i]
另外getline (char* s, streamsize n );
输入的最大流大小应该更大,因为当您输入另一个输入时,每个字符序列末尾都有一个空字符'\0'
和换行符'\n'
:
cin.getline(ptr[0], 10);
cin.getline(ptr[1], 10);
cin.getline(ptr[2], 10);
链接到解决方案: https://ideone.com/maSOSs