| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 815 人关注过本帖, 1 人收藏
标题:帮忙看一下这个简单程序
只看楼主 加入收藏
wubihai7
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2010-3-4
收藏
得分:0 
以下是引用xinjinlong在2010-12-20 17:15:44的发言:

请问你是怎么输入的?
输入时应该这样:1233,2222
你scanf中间有,
不行,中间,也会被当做字符输入!
2010-12-20 17:40
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
回复 9楼 wubihai7
我不是给你一个程序了吗,出现乱码是因为你声明字符数组的时候没有初始化里面的都是随机值,用static 可以自动初始化变量为‘\0’

Go Go Go
2010-12-20 17:43
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:3 
个人认为,数组名是常量,他输入应只是把第一个字符赋值给数组,至于乱码可能是数组未初始化*^o^*仅供参考

[ 本帖最后由 A13433758072 于 2010-12-20 18:22 编辑 ]

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-12-20 18:06
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:3 
程序代码:
#include<stdio.h>
main()
{
    printf("%c%c\n",0xcc,0xcc);
}
出现汉字的原因
将两个字符解析成一个宽字符了(还是UNICODE?)
出现
图片附件: 游客没有浏览图片的权限,请 登录注册
的结果是由于,str位于高地址,str1位于低地址
而str1里面全是0xcc,没有结束符'\0',所以先打印了str,然后打印str1时,将两个字节内容打印成一个汉字(于是有十个汉字),但没有结束符,继续打印后面的str(高地址,注意会有地址对齐,但刚好str1长20,被4整除,所以str位于20位置,紧接str1之后),直到遇到str里面的'\0',结束(这个问题119应该理解深刻吧,hehe)


[ 本帖最后由 xiaomarn 于 2010-12-20 18:58 编辑 ]
2010-12-20 18:31
wubihai7
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2010-3-4
收藏
得分:0 
以下是引用zhaoya881010在2010-12-20 17:43:38的发言:

我不是给你一个程序了吗,出现乱码是因为你声明字符数组的时候没有初始化里面的都是随机值,用static 可以自动初始化变量为‘\0’
为什么末尾多了一个,
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-12-20 18:41
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:0 
回复 3楼 zhaoya881010
你的程序是错的,输出的是str,str1全是0,根本就没输出,所以多出一个‘,’,四楼的laoyang103是对的
2010-12-20 18:43
wubihai7
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2010-3-4
收藏
得分:0 
以下是引用xiaomarn在2010-12-20 18:31:28的发言:

#include
main()
{
    printf("%c%c\n",0xcc,0xcc);
}
出现汉字的原因
将两个字符解析成一个宽字符了(还是UNICODE?)
出现的结果是由于,str位于高地址,str1位于低地址
而str1里面全是0xcc,没有结束符'\0',所以先打印了str,然后打印str1时,将两个字节内容打印成一个汉字(于是有十个汉字),但没有结束符,继续打印后面的str(高地址,注意会有地址对齐,但刚好str1长20,被4整除,所以str位于20位置,紧接str1之后),直到遇到str里面的'\0',结束(这个问题119应该理解深刻吧,hehe)
对该答案非常满意,谢谢了哈!
2010-12-21 12:38
xinjinlong
Rank: 3Rank: 3
来 自:河南南阳
等 级:论坛游侠
帖 子:61
专家分:117
注 册:2010-1-19
收藏
得分:0 
首先,十分抱歉没有明白楼主的意思,我还以为出错实在scanf函数这里
其次,你说的问题现在应该明白了,但是我只说一点,不同编译器是不一样的,理论上是直到碰到'\0',就停止输入,但是有的编译器较为智能,默认情况会在每个字节最后以为填写一个'\0'
你有兴趣可以是以下这个:
str[3]-->strlen(str)=7
str[6]-->strlen(str)=16
仅作参考,不同编译器是不一样的,有兴趣多交流!
2010-12-22 09:44
快速回复:帮忙看一下这个简单程序
数据加载中...
 
   



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

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