| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 861 人关注过本帖
标题:运行结果出现烫字的原因?
只看楼主 加入收藏
尹金魁2031
Rank: 3Rank: 3
来 自:河南省南阳市
等 级:论坛游侠
帖 子:156
专家分:162
注 册:2012-12-29
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:3 
运行结果出现烫字的原因?
#include<stdio.h>
#include<string.h>
int main()
{void copystr(char *,char *,int);
int m;
char str1[20],str2[20];
printf("input string:");
gets(str1);
printf("which character that bgegin to copy?");
scanf("%d",&m);

if(strlen(str1)<m)

printf("input error!");

else {copystr(str1,str2,m);
printf("result:%s\n",str2);
}
return 0;
}


void copystr(char *p1,char *p2,int m)
{
    int n;n=0;
    while(n<m-1)
    {
        n++;
        p1++;
    }
    while(*p1!='\0')
    {
        *p2=*p1;
        p1++;
        p2++;
    }
//    *p2='\0';//如果去掉这句话,就会出现下面这种情况
}

图片附件: 游客没有浏览图片的权限,请 登录注册


如果不注销这句话,就不会出现这种情况!看官,请看下图

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: character include return result 
2013-11-04 22:32
南国神画
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:51
专家分:124
注 册:2013-10-24
收藏
得分:7 
   首先说明一下,关于指针这一章我还没怎么看,只是以前学过一点,所以,我下面的说法纯属以我现在的知识储备臆断的。
 我觉得你这个可以对照数组来理解,譬如:s[i++]='....';s[i]='\0';我觉得和这种情况类似,这里*p2++之后,应该有个结束符,否则copy后,根据指针地址找不到东西就会输出乱码呀。(仅仅只是个人观点,还望有大神指点啊)。
2013-11-04 23:27
rchunjiang
Rank: 4
来 自:大连
等 级:业余侠客
帖 子:42
专家分:262
注 册:2013-10-25
收藏
得分:7 
'\0'是字符串结束的标志,字符串末尾没有'\0'的话,printf()函数会一直读取后面的字符来打印,直到遇到'\0'为止。第一个截图里由于没有结束的标志,显示完room四个字符后会继续显示,而第一个字符串room后面都没有定义数据,所以是上面的乱码,后面接着显示的是另外一个字符串的内容,说明两个字符串的内存空间是连着的,所以刚好显示完另外一个字符串遇到结束符就不显示了。数数乱码那部分刚好是16个字符的空间
2013-11-05 00:15
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:7 
没有处理好字符界限,出现乱码

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-11-05 06:23
快速回复:运行结果出现烫字的原因?
数据加载中...
 
   



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

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