| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1459 人关注过本帖
标题:再来一个问题
只看楼主 加入收藏
冯一超
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
收藏
 问题点数:0 回复次数:13 
再来一个问题
#include <stdio.h>
int main()
{
    int a;
    int b;
    char c[3];
    scanf("%s",c);
    printf("%s",c);
    return 0;
}
①这个数组的长度是三,但是如果我输入“123456789”结果会正常显示,不是溢出了吗??为什么??
②我发现输入的字符数小于等于12个,则结果正常显示,但是超过12个,运行后系统提示应用程序错误:“0x004017fc”指令引用的“0x0012001a”内存。该内存不能为“written”。
但是结果仍能正常显示!!为什么?
③我把char c[3]改成char *c就不行了,原理不是一样的吗?为什么不行?
搜索更多相关主题的帖子: 内存 int char 系统 结果 
2008-07-15 13:51
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
收藏
得分:0 
整个程序错的一踏糊涂。
2008-07-15 14:11
hello_moto
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-7-15
收藏
得分:0 
BS2#不负责任的回帖。

LZ,你看看下面的程序,能明白多少,如果还有不明白的问题,我下面再给你解释。
#include <stdio.h>
int main()
{
    int a=0xffffffff;
    int b=0xffffffff;
    char c[3];
    printf("a=%x, b=%x\n", a, b);
    scanf("%s",c);
    printf("%s\n",c);
    printf("a=%x, b=%x\n", a, b);
    return 0;
}
2008-07-15 14:19
冯一超
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
收藏
得分:0 
回复 2# 心若止水 的帖子
哪有!!!!!你还残忍啊!!!!!!!!!!!!!!!!!!!!!!!!
2008-07-15 16:22
zzc5411
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-14
收藏
得分:0 
回复 3# hello_moto 的帖子
不明白!
2008-07-15 16:41
冯一超
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
收藏
得分:0 
回复 3# hello_moto 的帖子
前面的两个变量a,b是没有意义的呀,我只不过忘记删除,放那里也不碍事。
两次printf("a=%x, b=%x\n", a, b);的结果难道不一样??、
2008-07-15 16:44
wh007008
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-7-13
收藏
得分:0 
回复3楼:弄不懂,int是整型,为什么后面有F,
int a=0xffffffff;
int b=0xffffffff
貌似scanf("%s",c);要改成scanf("%s",&c);
2008-07-15 16:45
冯一超
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
收藏
得分:0 
回复 7# wh007008 的帖子
c就是地址了
0x是十六进制整型,不过不知道这样做有什么意义
2008-07-15 16:58
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
我来回答了哦,
栈问题。
 int a
int b
char c[3]
这样在栈中申请了,int 型为4字节。二个是8字节。8+3+1=12字节。其实还有返回一个int 型。当你超过这个值。他就会
超出盖了返回地址。所以程序无返回了。你输入多于本身空间就会去盖栈里内容。如果超过就会报错。

[[it] 本帖最后由 missiyou 于 2008-7-15 17:09 编辑 [/it]]
2008-07-15 17:00
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
[bo][un]hello_moto[/un] 在 2008-7-15 14:19 的发言:[/bo]

BS2#不负责任的回帖。

LZ,你看看下面的程序,能明白多少,如果还有不明白的问题,我下面再给你解释。
#include
int main()
{
    int a=0xffffffff;
    int b=0xffffffff;
    char c[3];
    printf( ...

这个里面地址,按windows 内存设计中,空间分用户空间,和系统空间。你这个只是输出一下%x我不知道输出什么。%p 可能输出的是地址。可以这样。int *p;p=0x00400100;
int *l;l=0x00000000;
这个l就会报错,因为这个不是用户使用,是系统使用的。用于存句柄。
2008-07-15 17:05
快速回复:再来一个问题
数据加载中...
 
   



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

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