提问人:Yogesh Kumar 提问时间:4/20/2023 更新时间:4/20/2023 访问量:82
为什么它要打印额外的随机字符?[复制]
Why is it printing additional random characters? [duplicate]
问:
该图显示了输入和输出。
我采用字符数组作为输入并打印它,现在当我打印它时,它会打印输入字符以及一些额外的随机字符,为什么会这样??
#include<iostream>
int main()
{
int n;
std::cin>>n;
char array[100];
for(int i=0; i<n; i++)
{
std::cin>>array[i];
}
std::cout<<array;
return 0;
}
我原以为它会打印我提供的字母作为输入,但它正在打印额外的字符。
答:
4赞
463035818_is_not_an_ai
4/20/2023
#1
数组 的数组被视为字符串,字符串被终止。你的 和 的混合有点奇怪,但假设它是你想要的,你只需要添加终止符:char
\0
int
char
#include<iostream>
int main()
{
int n;
std::cin>>n;
char array[100];
for(int i=0; i<n; i++)
{
std::cin>>array[i];
}
array[n] = '\0';
std::cout<<array;
return 0;
}
虽然你应该用于字符串。上面的代码将在用户输入或更多 for 时调用未定义的行为。std::string
100
n
3赞
Andreas Wenzel
4/20/2023
#2
线
std::cout<<array;
requires 这是一个有效的 C 样式字符串,该字符串是由 null 字符结尾的字符数组。您违反了此规则,因为您没有确保字符串以 null 结尾。array
您的程序正在打印垃圾字符,因为该代码行将继续打印字符,直到它碰巧找到 null 字符(即具有字符代码的字符)。0
我建议你添加这一行
array[n] = '\0';
在循环后添加终止 null 字符。
下一个:从 C++ 中的单独文件导入函数
评论
std::cout<<array;