gpt4 book ai didi

c++ - 接受指针数组的输入

转载 作者:行者123 更新时间:2023-11-28 05:13:08 26 4
gpt4 key购买 nike

谁能告诉我为什么不能像下面的代码那样使用输入流在指向字符串的指针数组中输入:

char *names[5];

for(int i=0; i<5; i++)
{
cout<<"enter name "<<i+1;
cin>>names[i];
}

最佳答案

变量“names”是一个未定义的字符指针数组。那是你的第一个问题。指针是未定义的,没有为它们分配内存。在您的原始代码示例中,有五个具有未定义值的 char 指针。这就是程序崩溃的原因,因为它试图访问指针中无效地址的内存。另一个问题是没有分配内存来保存来自标准输入的字符数组。

你可以做这样的事情来让你的原始示例在没有崩溃的情况下工作:

#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char** argv)
{
char names[5][128];
memset(names, 0, sizeof(names));

for (int i = 0 ; i < 5 ; i++ )
{
cout << "enter name " << i+1 << ": ";
cin >> names[i];
}

for (int i = 0 ; i < 5 ; i++ )
{
cout << names[i] << "\n";
}
}

这分配了一个包含 5128 个字符串的数组。它还会使用 memset() 清除数组。

因为这是 C++,所以使用 C++ 风格似乎更有意义。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

const int NUM_NAMES = 5;

int main(int argc, char** argv)
{
vector<string> names;
names.resize(NUM_NAMES);

for (int i = 0 ; i < NUM_NAMES ; i++ )
{
cout << "enter name " << i+1 << ": ";
cin >> names[i];
}

for (int i = 0 ; i < NUM_NAMES ; i++ )
{
cout << names[i] << "\n";
}
}

关于c++ - 接受指针数组的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43161933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com