while(str1[i++]!='\0')
{
str2[i]=str1[i];
// i++;
}
主要就是这段循环,试了很多遍,发现:
当把++运算放到上面的时候运行就会显示乱码
把++运算放到下面循环体内的话,暂时没发现有乱码
为什么?
主要是你没明白i++的运算规则,这跟你祗看视频不看书有关。后缀的++操作符,变量变化在后,即在发出该操作符之后才增加,此时,下面str[i]=str1[i]的i,已经比前面while()中的i大1。用具体数字代入就明白了:一开始,i=0,str1[0]!='\0',于是进入循环体,此时i=1,执行str2[1]=str1[1],依此类推。那么为什么是乱码呢?由于你是把str1复制给str2,在str2的定义中,它是局部数组,没有初始化的,str2[0]不知道是什么值,而你跳过了str2[0],所以这个乱码被带入最终的str2中。通常情况下,局部变量的乱值往往是大于0x80的byte,这在国际化操作系统(比如中文系统)中,视为一个多字节字符编码的前缀,系统的显示模块把两个字节解释为一个国际化字符。
这段代码你可以这样写:
程序代码:
while ((str2[i] = str1[i]) != '\0')
{
++i;
}
[
本帖最后由 TonyDeng 于 2015-9-9 11:38 编辑 ]