【发布时间】:2020-04-20 06:33:30
【问题描述】:
当我运行这个程序时,它运行良好,但由于某种原因,我在输出中随机出现垃圾。如果我输入一个大于 11 个字符的字符串,我将开始得到随机垃圾,如果我输入少于 11 个字符,则随机垃圾不会出现并且看起来很好......
#include <iostream>
using namespace std ;
int main ()
{
//Declare and initialize variables
char str1 [100], str2 [100] ;
int i, y ;
//Top display
cout << endl
<< "Copy one string to a second string\n"
<< "----------------------------------\n" ;
//Read user input
cout << "Please enter a string: " ;
cin.getline (str1 , sizeof (str1) ) ;
cout << endl ;
//Make copy using strcpy
for ( i = 0 ; str1[i] != '\0'; i ++ )
{
str2[i] = str1[i] ;
cout << i << " " ;
}
y = sizeof (str2) ;
//Display results
cout << endl
<< "Str1: " << str1 << " has been copied into str2: " << str2 << endl
<< "y: " << y << endl ;
return 0 ;
}
【问题讨论】:
-
Seems to work 给我。你期望什么结果,你观察到什么结果。
-
@IgorTandetnik link 这是错误的图片。当我输入 12 个或以上字符时,它会给出随机垃圾。但在 11 个字符及以下没有垃圾。
-
你应该以空结尾的 c 样式字符串。
str1[i] != '\0'在str2获得终止符之前停止复制。 -
阻力最小的路径是在循环之后添加
str2[i] = '\0'; -
@user4581301 sizeof 返回分配给数组的元素数,而 strlen 返回我相信的字符串的字符长度。我只是在其中添加了那些随机计算来帮助我找出我做错了什么。