| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 516 人关注过本帖
标题:一个奇怪的问题
只看楼主 加入收藏
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
一个奇怪的问题
今天调试一个程序的时候,发现有一条语句除了问题:一个unsigned char数组,8个元素,在程序中用scanf按16进制的格式读取数字进每一个元素(读取的数保证不大于FF),但是读取到第6或者第七个元素时,代表下标的变量就会被置0,导致程序无限循环。原本以为是溢出,但是无论数组开多大都不行,输入的数全为1不行,变量声明间又插进几个新变量也不行。不过先读取到一个int再赋值就可以,或者直接把数组声明改成int。但是理论上原先的做法没有问题啊,为什么会这样呢?
搜索更多相关主题的帖子: 声明 数字 元素 
2012-03-17 22:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
scanf的可变参数部分传入的是地址,而该地址对应内存所保存的数据类型是由格式化字符串来决定的,不是由传入变量的类型来决定。

重剑无锋,大巧不工
2012-03-17 23:10
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 2楼 beyondyf
那么%x要求内存大于char的吗?

酱油实习生
2012-03-17 23:43
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
代码帖上来

总有那身价贱的人给作业贴回复完整的代码
2012-03-18 00:16
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 
希望从中获得启发丶

编程之路定要走完……
2012-03-18 00:16
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
程序代码:
int i;
unsigned char keychar[8];
for (i = 0; i < 8; i++)
        scanf("%x", &keychar[i]);

酱油实习生
2012-03-18 00:33
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:2 
你把i和keychar的地址打印出来,看是不是挨着?离多远?

总有那身价贱的人给作业贴回复完整的代码
2012-03-18 00:41
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
怎么没动静了?

总有那身价贱的人给作业贴回复完整的代码
2012-03-18 01:09
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
程序代码:
#include <stdio.h>

int main(int argc, char *argv[])
{
typedef unsigned char uint8_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
    int32_t i;
    const int32_t signal = 0x12345678;
    uint8_t keychar[8]; /* uint32_t keychar[2]; */
    printf("const signal = 0x%x\r\n", signal);
    for (i = 0; i < 8; i++)
        scanf("%x", &keychar[i]);
    printf("const signal = 0x%x\r\n", signal);

    return 0;
}

技术问题,请不要以短消息方式提问
2012-03-18 14:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:8 
回复 6楼 墨清扬
不能用%x的,变量是char,你用%x读,不错才怪

授人以渔,不授人以鱼。
2012-03-18 16:06
快速回复:一个奇怪的问题
数据加载中...
 
   



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

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