鱼C论坛

 找回密码
 立即注册
查看: 1282|回复: 6

求问程序出现乱码是怎么回事?

[复制链接]
发表于 2016-12-8 21:56:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include  <stdio.h>
#define    N    20
void  fun( char  *a , char  *s)
{
        int i;
        for(i=0;s[i];i++)
        {
                a[i]=s[i];
        }

}

main()
{  char  s1[N],  *s2="abcdefghijk";
   fun( s1,s2);
   printf("%s\n", s1);
   printf("%s\n", s2);
}

求大神指点一下!

如图

如图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-9 02:54:12 | 显示全部楼层
本帖最后由 ^_^^_^^_^^_^ 于 2016-12-9 03:48 编辑

for(i=0;s[i];i++)
这个判断 程序怎么会知道要在哪里停下

for(i = 0; i < 20 ; i++)或者 i < N

for (i = 0;i<=(strlen(s));i++)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 09:13:01 | 显示全部楼层
出现乱码是因为你的s1数组没有初始化,内部全是一些垃圾数据,所以打印出来会是一些乱码。但是你明明做了字符串拷贝,但为什么还会打印出后面的乱码?那是因为你在拷贝两个字符串的时候判断条件是零跳出。这样刚好要拷贝字符串结束/0的时候跳出去了,也就没有把字符串结束符拷到S1中。这样就导致S1中的字符串是没有结尾的。又因为你没有初始化S1。就导致打印的时候根本找不到哪里结束,所以在字符串后面会有一堆乱七八糟的数据被打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 09:13:50 | 显示全部楼层
本帖最后由 呆鸭 于 2016-12-9 09:20 编辑

s1分配了20 chars的长度,但填进去的长度不足,没填到的部份就会遗留先前其它程序用过以后的残留值,显示出来就是乱码,C的字符串是以0结尾的,所以填进去的字符串,填完后要在结尾填0,这样就可以解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 09:18:28 | 显示全部楼层
本帖最后由 呆鸭 于 2016-12-9 09:21 编辑
^_^^_^^_^^_^ 发表于 2016-12-9 02:54
for(i=0;s;i++)
这个判断 程序怎么会知道要在哪里停下


for(i=0;s;i++)
这个判断 程序怎么会知道要在哪里停下
^^^^理论上这个写法是错的,不过C有一些坑,可以试试,有一种可能,C的字符串是以0结尾的
有可能上列写法会自动从字符串开头找到碰到值为0的位置停止。
for(i = 0; i < 20 ; i++)或者 i < N
^^^^这个写法对。
for (i = 0;i<=(strlen(s));i++)
^^^^这个要试一下。

已经10年没摸C/C++了,若有说错,请多包涵!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-10 01:56:28 | 显示全部楼层
呆鸭 发表于 2016-12-9 09:18
for(i=0;s;i++)
这个判断 程序怎么会知道要在哪里停下
^^^^理论上这个写法是错的,不过C有一些坑,可 ...

s1[N] = {" "}

这样初始化 s1 问题就解决了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-11 00:18:01 From FishC Mobile | 显示全部楼层
呆鸭 发表于 2016-12-9 09:13
s1分配了20 chars的长度,但填进去的长度不足,没填到的部份就会遗留先前其它程序用过以后的残留值,显示出 ...

嗯嗯 谢谢 知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表