阿撩 发表于 2016-12-8 21:56:32

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

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

}

main()
{chars1,*s2="abcdefghijk";
   fun( s1,s2);
   printf("%s\n", s1);
   printf("%s\n", s2);
}


求大神指点一下!

^_^^_^^_^^_^ 发表于 2016-12-9 02:54:12

本帖最后由 ^_^^_^^_^^_^ 于 2016-12-9 03:48 编辑

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

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

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

musilintan 发表于 2016-12-9 09:13:01

出现乱码是因为你的s1数组没有初始化,内部全是一些垃圾数据,所以打印出来会是一些乱码。但是你明明做了字符串拷贝,但为什么还会打印出后面的乱码?那是因为你在拷贝两个字符串的时候判断条件是零跳出。这样刚好要拷贝字符串结束/0的时候跳出去了,也就没有把字符串结束符拷到S1中。这样就导致S1中的字符串是没有结尾的。又因为你没有初始化S1。就导致打印的时候根本找不到哪里结束,所以在字符串后面会有一堆乱七八糟的数据被打印出来。

呆鸭 发表于 2016-12-9 09:13:50

本帖最后由 呆鸭 于 2016-12-9 09:20 编辑

s1分配了20 chars的长度,但填进去的长度不足,没填到的部份就会遗留先前其它程序用过以后的残留值,显示出来就是乱码,C的字符串是以0结尾的,所以填进去的字符串,填完后要在结尾填0,这样就可以解决问题。

呆鸭 发表于 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++了,若有说错,请多包涵!

^_^^_^^_^^_^ 发表于 2016-12-10 01:56:28

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

s1 = {" "}

这样初始化 s1 问题就解决了呢

阿撩 发表于 2016-12-11 00:18:01

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

嗯嗯 谢谢 知道了
页: [1]
查看完整版本: 求问程序出现乱码是怎么回事?