| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1268 人关注过本帖
标题:[讨论]请你给出运行结果,并说明原因
只看楼主 加入收藏
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-18 13:06
wangsong
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2006-7-15
收藏
得分:0 
在VC6下,这个程序首先可以通过编译,其次可以正确运行,再次,它每次的运行结果不是随机的!
想想为什么?15楼的,you are right,but why?

2006-07-18 23:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

#include<stdio.h>
main()
{
char str[20]="sdjhffdfdhfd";
printf("%c",str[21]);

}
编译运行通过,结果是这样的
。。
y


倚天照海花无数,流水高山心自知。
2006-07-20 16:25
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

楼主的程序大家还是少运行为妙,随便改变未知存储单元的内容,这种风险太大.
至于楼上的,您的程序只是访问未知单元,但并未对其处理,风险不大。程序显示的之所以是乱码,是因为访问到了未知的单元,单元存储的8bit刚好是10011000,打印出其ASCii码对应的刚好是那个.
您运行的每次结果都是一样的,那是因为:编译器为那个字符串分配空间的位置跟上次程序是一样的(因为每执行完程序,字符串空间被释放),也就是说每次字符串的地址都是一样的。
可做如下检验:
#include<stdio.h>
main()
{
char str[20]="sdjhffdfdhfd";
printf("%x\n",str);
printf("%c",str[21]);

经运行,可知每次运行得到的地址都是一样的。


对不礼貌的女生收钱......
2006-07-20 16:41
edawar
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-7-12
收藏
得分:0 

我有个问题 既然程序能运行 有什么问题能够防止这种情况发生呢?

2006-07-20 17:03
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
这种情况?

对不礼貌的女生收钱......
2006-07-20 17:11
lauyeah
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-12-26
收藏
得分:0 

#include<stdio.h>
#include<string.h>

int main()
{
int x = 10;
char c[10];
printf("%d\n", strlen( c ) );
strcpy( c, "1234567890987" );
printf("%d\n", x);

return 0;
}

此程序中strlen( c ) 计算的是字符串的长度,而char c[10];定义的是一个字符数组!故输出将有错!
将程序改为:
#include<stdio.h>
#include<string.h>

int main()
{
int x = 10;
char *c;
c="adljdfgdfgf";
printf("%d\n", strlen( c ) );
strcpy( c, "1234567890987" );
printf("%d\n", x);

return 0;
}
所求长度将是c="adljdfgdfgf";所给的具体长度!

2006-07-21 11:46
快速回复:[讨论]请你给出运行结果,并说明原因
数据加载中...
 
   



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

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