| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1693 人关注过本帖
标题:这段代码else语句的输出为什么会是这样的?
只看楼主 加入收藏
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
结帖率:90.38%
收藏
已结贴  问题点数:20 回复次数:5 
这段代码else语句的输出为什么会是这样的?
这段代码else语句的输出为什么会是这样的?即图中第3行的输出为什么是这个结果?else语句在这起什么作用?
程序代码:
#include"stdio.h"
int main(void){
    int i,j;
    char h;
    j=0;
    i=0;
    char p[8];
    fgets(p,14,stdin);
    for(i=0;i<=7;i++)
        printf("%c ",p[i]);
    printf("\n");
    i=0;
    for(p[i];p[i]!='\n'&&p[i]!='\0';i++)
        ;
        if(p[i]=='\n')
            p[i]='\0';
        else
            while((h=getchar())!='\n'){
                printf("%c ",h);
                continue;
            }
    printf("\n");
    for(i=0;i<=7;i++)
        printf("%c ",p[i]);
    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册
2020-06-02 23:30
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
收藏
得分:10 
fgets  会读取 n-1 个字符, 你传入14 ,它就会读取 13 个, 下次 getchar() 就会从 14个开始读取了
2020-06-02 23:57
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:10 
数组大小8   fgets读13有缓冲区溢出
2020-06-03 07:13
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
收藏
得分:0 
以下是引用fulltimelink在2020-6-3 07:13:12的发言:

数组大小8   fgets读13有缓冲区溢出

此时getchar()读取的是第13个还是第14个?
如果读取的是第13个,那么读取的应该是空字符,应该输出空字符才对,为什么输出的是x呢?
如果读取的是第14个,那么输出的应该是无效值才对。
2020-06-03 14:21
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
收藏
得分:0 
以下是引用JabinZ在2020-6-2 23:57:33的发言:

fgets  会读取 n-1 个字符, 你传入14 ,它就会读取 13 个, 下次 getchar() 就会从 14个开始读取了

此时getchar()读取的是第13个还是第14个?
如果读取的是第13个,那么读取的应该是空字符,应该输出空字符才对,为什么输出的是x呢?
如果读取的是第14个,那么输出的应该是无效值才对。
2020-06-03 14:23
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:0 
回复 4楼 hffjhhh
getchar是从输入缓冲区读取的,和数组p并没有关系,也就是和你的for循环和if都没关系
2020-06-03 14:48
快速回复:这段代码else语句的输出为什么会是这样的?
数据加载中...
 
   



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

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