求这段c++代码有什么问题?

来源:百度知道 编辑:UC知道 时间:2024/06/16 17:11:46
char str1[10],str2[10];
for(i=0;i<10;i++)str1[i]='a';
cout<<str1<<endl;
strcpy(str2,str1);
cout<<str1<<endl<<str2<<endl;
请问上面的代码有什么问题?
为什么输出str1,和str2后会有乱码?而且第一次输出和第二次输出str1都不一样?
还有为什么stra[10]="1234567890"这个不能通过编译,必须要空出一个空间来保存\0吗?
但是为什么gets(str1)时,输入10个字符,当cout<<str1<<endl;时不会出现乱码

汗。。你对str1 赋值的时候都没结束标志。。。
for (i=0,i<9,i++)
{
str[i]='a';
}
str1[i]='\0';

至于用gets(str)是因为这里你没有限定数组长度。。只给出数组名了。。也就是起始地址,等你输入完毕后。。会自动给你补上一个结束标志
比如:char str[10]="1234567890" 会出错,但是 char str[]="1234567890" 就不会出错了

没有字符结束符‘\0’不知道到哪里结束。在循环语句后在添上str1[i]='\0';

在str最后加个'\0'
for(i=0;i<9;i++)str1[i]='a';str1[i]='\0';

strcpy的第一个参数必须有足够的存储空间来容纳str1
char* str=new char[11]
还有 你的str1最后一个元素应该赋值为'\0' 结束符,否则cout<<不知道str1从哪结束就会把str1在在存储空间中后面的未知数据也输出来了

char str1[11];
char* str2=new char[11];
for(int i=0;i<10;i++) str1[i]='a';
str1[i+1]='\0';
cout<<str1<<endl;
strcpy(str2,str1);
cout<<str1<<endl<<str2<<endl;

没有字符结束符‘\0’是不行的

字符数组赋初值应该是这样
char str1[10]={1,2,3,4,5,6,7,8,9,10};