| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 460 人关注过本帖
标题:无意中发现的一个问题,求解答
只看楼主 加入收藏
c3242404
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-6-22
结帖率:100%
收藏
已结贴  问题点数:9 回复次数:3 
无意中发现的一个问题,求解答
这是c primer plus第五版书上的例题
/*输入以q开头的单词,并将输入复制到一个临时数组里输出*/
#include <stdio.h>
#include <string.h>
#define SIZE 40
#define LIM 5

int main (void)
{
    char qwords[LIM][SIZE];
    char temp[LIM];
    int i = 0;

    while(i < LIM && gets(temp))
    {
        if(temp[0] != 'q')
            printf("%s doesn't begin with q!\n", temp);
        else
        {
            strcpy(qwords[i], temp);
            i++;
        }//endof else
    }
    puts("Here are the words accepted:");
    for(i = 0; i < LIM; i++)
        puts(qwords[i]);

    return 0;
}
这个代码书上本来是char temp[SIZE];
但我打错成了char temp[LIM];
然后输入的时候就有问题了:
如果输入的第一个字符串就超过LIM的范围,程序就直接终止了;
图片附件: 游客没有浏览图片的权限,请 登录注册

但如果第一个字符串小于LIM,后面的字符串有大于LIM的,程序就没有终止,第一个小于LIM的字符串就不输出,
图片附件: 游客没有浏览图片的权限,请 登录注册

然后又试了几次,发现凡是第一个字符串小于LIM的,后面只要有一个字符串超过LIM3个字符以上的,第一个字符串就不显示,或者随机显示几个字符,这是为什么?

[ 本帖最后由 c3242404 于 2014-8-20 22:05 编辑 ]
搜索更多相关主题的帖子: 单词 include 
2014-08-20 22:01
cszzlsw
Rank: 1
来 自:深圳
等 级:新手上路
帖 子:3
专家分:8
注 册:2014-8-20
收藏
得分:0 
等待大神来解答啊,我等小辈无能为力啊!

正在学习嵌入式中,希望能碰到志同道合的朋友或者是嵌入式的大神,走向进步!
2014-08-20 22:59
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:9 
溢出啊   出现错误(异常)是狠正常的   出现一些能运行但是结果很奇葩 也是有一定几率的

DO IT YOURSELF !
2014-08-21 08:57
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单发表一下自己的意见:
1首先计算机不会骗人
2解释计算机行为 特别依赖环境
3明显有gets()溢出行为,结果难解释
4涉及到strcpy(,B) B参数异常行为 难以解释
2014-09-01 07:48
快速回复:无意中发现的一个问题,求解答
数据加载中...
 
   



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

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