标题:关于字符串中null和EOF的理解问题
只看楼主
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
结帖率:100%
已结贴  问题点数:20 回复次数:8 
关于字符串中null和EOF的理解问题
题目是:设计并测试一个函数,从输入中获取n个字符,把结果储存在一个数组里,它的地址被传递作为一个参数。(c primer plus p371编程练习第一题)。
答案如下:
#include<stdio.h>
#define LEN 10
char* getnchar(char* str,int n);
int main(void)
{
    char input[LEN];
    char* check;
   
    check=getnchar(input,LEN-1);
    if(check==NULL)
      puts("Input failed.");
    else
      puts(input);
    puts("Done.");
   
    return 0;
}

char* getnchar(char* str,int n)
{
    int i,ch;
    for(i=0;i<n;i++)
    {
        ch=getchar();
        if(ch!=EOF)   //这里的EOF是什么意思,为什么要加这个判断
          str[i]=ch;
        else break;
    }
    if(ch==EOF)      //为什么值为EOF就要返回空指针类型呢
      return NULL;
    else
    {
        str[i]='\0';
        return str;
    }
 }
按照我的理解,EOF在键盘输入为ctrl+z,逻辑上来说如果不输入这个值上述的判断不是没有用吗?还是EOF在这里有别的含义?请各位老铁指教!
搜索更多相关主题的帖子: null EOF char str input 
2017-08-15 14:40
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:5 
EOF是文件尾,它是一个标记,表示已经读取完毕,在windows中可以用ctrl+z模拟文件尾。
你发的代码的意思是只要没有读取到文件尾,就将读取到的字符存入数组,否则跳出循环。
那个for循环也在控制读取字符的数量。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-08-15 14:55
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
得分:0 
回复 楼主 zzdloveclp
可是这里的EOF有可能达到吗?如果不是手动输入的话。不可能达到为什么要加这个判断呢,还是有别的作用
2017-08-15 15:19
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
得分:0 
回复 2楼 renkejun1942
可是这里的EOF有可能达到吗?如果不是手动输入的话。不可能达到为什么要加这个判断呢,还是有别的作用
2017-08-15 15:19
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
以下是引用zzdloveclp在2017-8-15 15:19:49的发言:

可是这里的EOF有可能达到吗?如果不是手动输入的话。不可能达到为什么要加这个判断呢,还是有别的作用

中止输入吧
2017-08-15 16:07
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 4楼 zzdloveclp
为什么不可能?你确定你认真看书了吗?竟然不知道重定向。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-08-15 17:59
悟爱
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:45
注 册:2017-7-20
得分:5 
null==== (void*)0
EOF==-1
好像是这样
2017-08-15 18:47
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
得分:0 
回复 6楼 renkejun1942
不是重定向,标准输入
2017-08-15 20:06
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
得分:5 
这个非常简单啊。
getchar()函数操作失败返回EOF。
所以楼上说的什么重定向什么的应该是想多了。
EOF不一定是文件结束符,也可能只是个错误标志。


[此贴子已经被作者于2017-8-15 21:38编辑过]


  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-08-15 21:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480062-1-1.html




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

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