我正在编写一个简单的控制台应用程序来读取 3 个单词并将它们保存在一个数组中。但是从控制台获取三个输入后,它只在控制台中显示第三个单词三次。例如,如果我输入:“一”、“二”、“三”,则输出仅显示“三”3 次)。
这是我的代码:
int main(int argc, char *argv[])
{
char* input[30];
char word[30];
int i=0;
for(i=0; i<3 ;++i)
{
cin >> word;
input[i] = word;
}
input[i] = 0;
i=0;
while(input[i])
{
cout << input[i] << endl;
i++;
}
return 0;
}
我在这里做错了什么?感谢您的帮助。
您只有一个缓冲区 ( char word[30]
),每次都会覆盖它。
当你这样做时:
input[i] = word;
您正在将第一个元素的地址分配给 input
中的每个元素,并且只为缓冲区分配地址(当您使用裸名时,数组会降级为指针)。您最终在 input[]
中得到相同地址的三个拷贝(这是 word
的地址,其中包含您从 cin
)
解决此问题的一种方法是使用 strdup()
并将新分配的字符串分配给您的 input[i]
for(i=0; i<3 ;++i)
{
cin >> word;
input[i] = strdup(word);
}
此外...如果您只需要三个输入“单词”,您只需要一个包含 3 个 char
指针的数组:
char *input[3];
你的输出循环看起来很像你的输入循环:
for(i=0; i<3 ;++i)
{
cout << input[i] << endl;
}
编辑:请注意,此答案是基于您想要使用数组。如果这不是要求的家庭作业,请参阅 bobbymcr 的回答 - 在 C++ 中,使用 C++。
我是一名优秀的程序员,十分优秀!