Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果fgetc读取0xFF会发生什么情况?_C_Casting_Fgetc - Fatal编程技术网

如果fgetc读取0xFF会发生什么情况?

如果fgetc读取0xFF会发生什么情况?,c,casting,fgetc,C,Casting,Fgetc,fgetc一次从文件中读取一个字符,并以int类型返回该字符。如果文件结束,则fgetc返回EOF(“可能”(int)(-1))。然而,我经常看到这一点: char ch; while ((ch = fgetc(fp)) != EOF) { /* Do something. */ } |<-- PARN -->| charch; 而((ch=fgetc(fp))!=EOF){/*做点什么。*/} || 这是我所关心的: fgetc读取OxFF并返回0x0

fgetc
一次从文件中读取一个字符,并以
int
类型返回该字符。如果文件结束,则
fgetc
返回
EOF
(“可能”
(int)(-1)
)。然而,我经常看到这一点:

char ch;

while ((ch = fgetc(fp)) != EOF)  {  /* Do something. */  }
       |<--  PARN  -->|
charch;
而((ch=fgetc(fp))!=EOF){/*做点什么。*/}
||
这是我所关心的:

  • fgetc
    读取
    OxFF
    并返回
    0x000000FF
  • 0xFF
    被分配给
    ch
    。(从
    int
    char
    进行类型转换)
  • 如果
    PARN
    char
    类型,则它将被提升为
    0xFFFFFFFF
  • 中断while循环,因为
    PARN==EOF
    。(停止从文件中读取)

  • 我们如何区分读取
    OxFF
    和返回
    EOF
    之间的区别?

    fgetc返回类型为
    int
    的全部原因是,它可以返回
    无符号字符的值,或者
    EOF
    。规范和学习C的任何好资源中都清楚地记录了这一点。如果使用
    char
    类型的对象存储结果,这是程序员错误。

    fgetc
    的返回类型为
    int
    的全部原因是,它可以返回
    无符号char
    的值,或
    EOF
    。这在规范和学习C的任何优秀资源中都有明确的记录。如果您使用类型为
    char
    的对象来存储结果,这是程序员错误。

    是的,您担心的是,在进行比较之前,值被类型转换为char是正确的

    最简单的解决方案是:

    int chread;
    while ((chread = fgetc(fp)) != EOF) { char ch = chread; /* Do something. */ }
    

    是的,您的担心是正确的,在进行比较之前,该值会被typecast转换为char

    最简单的解决方案是:

    int chread;
    while ((chread = fgetc(fp)) != EOF) { char ch = chread; /* Do something. */ }
    
    fgetc()
    在成功时返回获取的字符,或在失败时返回
    EOF

    如果故障是由文件结束条件引起的,则在流中另外设置
    eof
    指示器(请参阅)。如果故障是由某些其他错误引起的,请将错误指示器(请参阅)设置为启用。

    fgetc()
    成功时返回获取的字符,或失败时返回
    EOF


    如果故障是由文件结束条件引起的,则在流中另外设置
    eof
    指示器(请参阅)。如果故障是由其他错误引起的,请将错误指示器(请参阅)设置为运行状态。

    这就是您将
    ch
    声明为
    int
    而不是
    char
    类型的原因。然后,您的代码就会崩溃。大多数情况下,人们将
    ch
    声明为
    char
    @KevinDong:这是错误的。不要这样做。这就是你将
    ch
    声明为
    int
    而不是
    char
    类型的原因。然后你的代码爆炸了。大多数情况下,人们将
    ch
    声明为
    char
    @KevinDong:那是错误的。别这样,我明白了。当我在other中看到这样的代码时,我认为它是错误的,所以我在这里询问并检查它是否正确。非常感谢我得到了它。当我在other中看到这样的代码时,我认为它是错误的,所以我在这里询问并检查它是否正确。非常感谢感谢您的解决方案。;-)感谢您的解决方案。;-)