您想要的可能是以这种方式声明您的数组:
char mess[10][80];
当您从 getline 读取多达 80 个字符时。
您当前的实现构建了一个 10 的数组,char*
这些数组从未初始化为指向已分配的缓冲区。
一种更安全的方法是使用std::string
缓冲区大小来为您处理。一个简单的改变:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
std::string mess[10];
int i = 0;
for (; i < 10; i++)
{
cout << "Enter a string: ";
cin >> mess[i];
}
for (i = 0; i < 10; i++)
cout << mess[i] << endl; // you probably want to add endl here
system("PAUSE");
return EXIT_SUCCESS;
}
应该给你你想要的。
编辑
如果您绝对需要char *
(这不是一个好主意),这就是您要寻找的:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char* mess[10];
int i = 0;
for (; i < 10; i++)
{
cout << "Enter a string: ";
mess[i] = new char[80]; // allocate the memory
cin.getline(mess[i], 80);
}
for (i = 0; i < 10; i++)
{
cout << mess[i] << endl;
delete[] mess[i]; // deallocate the memory
}
// After deleting the memory, you should NOT access the element as they won't be pointing to valid memory
system("PAUSE");
return EXIT_SUCCESS;
}