putc()在c中返回什么?

时间:2017-07-19 11:42:51

标签: c ascii eof non-ascii-characters stdio

我很想知道putc()返回什么。我正在浏览以下链接:https://www.tutorialspoint.com/c_standard_library/c_function_putc.htm。现在,如果putc()在出错时返回EOF,那么一个自然的问题是它在文件末尾返回什么?为此我在dev c ++中写了以下内容:

代码

#include <stdio.h>

int main() {
    char ch = EOF;
    printf("%d\n", putc(ch, stdout));
    printf("hello %d", EOF);

    return 0;
} 

输出

255
hello -1

这有点奇怪。谁能帮我吗 ? EOF不是What is the ascii value of EOF in c.?中所述的ASCII字符,那么为什么255(是的,它不是ASCII)在第一行,-1在第二行?

3 个答案:

答案 0 :(得分:2)

EOF是-1,因为你可能已经发现了。因此,如果您putc(EOF,stdout),则在输出中看到255,因为-1在打印前会转换为unsigned char

答案 1 :(得分:0)

根据cppreference.com上的fputc文档,该字符在内部转换为Button { id: login text: qsTr("LOGIN") Binding { target: login property: "background.color" value: 'red' when: !login.pressed // Here comes the state } }

  

在内部,角色就在之前转换为unsigned char   写作。

如果您现在有一个(可能已签名)字符,并且您指定了unsigned char,并且char ch = EOF实际上是EOF,那么请将-1转换为(char)-1 } (unsigned char)-1,然后将其作为255传回。

答案 2 :(得分:0)

来自a putc() manual

  

fputc()putc()putchar()将写为无符号 char 的字符返回给 int < / em>或EOF出错。

(强调我的)

EOFint常量,它与任何字符值都不同,因此自然选择可能是-1(许多实现都使用此方法)。

现在,如果您的char 已签名,则将EOF转换为char仍为-1。但该函数对字符使用 unsigned char ,因此返回255(这将是解释为 unsigned 的相同值,假设签名值存储在2& #39;补码,char有8位)。

只需按照记录的方式使用这些功能:传递unsigned char进行打印(字符常量很好),并将返回值作为int。如果返回值不是EOF那么,则可以将其解释为unsigned char