| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 914 人关注过本帖
标题:C语言,copy一个字符数组,运行时结果出现乱码!为什么?
只看楼主 加入收藏
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 5楼 TonyDeng
亲,也许我前面提问的方式有些不对
或者说我说的某句话,如果有不妥之处
还望你见谅~
不好意思
我没有说要简单的要答案的意思
要答案没意思,过会就忘了,对自己没好处,还浪费你们时间
只有自己写代码认真揣摩才行
书上的程序我基本都是自己先写,一遍一遍的敲上去慢慢理解的
d但是毕竟对语言还不熟悉,总会犯各种错误,书上和百度都找不多答案了有时就求助你们了
所以,希望你们能体谅一下哈,我也会不断努力去改善自己发现问题和解决问题的能力的

[ 本帖最后由 计算机之祖 于 2015-9-8 22:17 编辑 ]
2015-09-08 22:10
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 13楼 计算机之祖
道歉多了不值钱

剑栈风樯各苦辛,别时冰雪到时春
2015-09-08 22:14
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 14楼 林月儿
那不重要啊
我的目的是好好学C语言
也许我被误解成光顾索取答案了
那没意思,过几天就忘了
2015-09-08 22:18
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:3 
用直到型循环在不单独“++”的情况下可达到你的目的,代码如下:
程序代码:
#include <stdio.h>
void main()
{
    char a[]="abcdefghijklmn",b[100];
    int i=0;
    do
    {
        b[i]=a[i];
    }while(a[i++]);
    printf("%s\n",b);
}

能编个毛线衣吗?
2015-09-08 22:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
    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 编辑 ]

授人以渔,不授人以鱼。
2015-09-09 11:35
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 17楼 TonyDeng
恩,谢谢!
是我疏忽了,光顾着和i++自增循环去了
没注意到str1[0]被跳过去了
看来还得细心一点
2015-09-09 14:40
快速回复:C语言,copy一个字符数组,运行时结果出现乱码!为什么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015066 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved