C char 在编译时显示为 int

标签 c char int printf compiler-warnings

我正在学习 C,并且一直在尝试编写一个程序来接受用户输入,并删除其中的任何双空格,然后再次打印出来。我们还没有做数组,所以我需要一个字符一个字符地做。这是我的代码:

#include <stdio.h>

main()
{
    char c;
    int count;
    count = 0;

    while ((c = getchar()) != '\n')
        if (c == ' ')
            count++;
        if (c != ' ')
            count = 0;
        if (count <= 0)
            printf("%s", c);
}

但是,此代码不起作用。编译器返回错误

:15: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’

有什么帮助吗?我不知道我做错了什么。

最佳答案

使用%c 格式说明符打印单个char

printf("%c", c);

%s 格式说明符告诉 printf 期望一个以 null 结尾的字符数组(又名字符串)。

由于传递给 printf 的参数(超出格式字符串)的默认提升,错误消息指的是 c 具有 int 类型。 This previous answer对默认促销有很好的描述; this previous thread解释了为什么需要默认促销的一些原因。

关于C char 在编译时显示为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626657/

相关文章:

c - 两个大数 char 类型的最高有效位之和

c# - 使用 C# 确定输入到文本框中的字符数

generics - 使用泛型类型时如何使用整数文字?

java - 在 Java 中将用户输入(字符串)分配给整数

c - Linux 中父进程和子进程地址空间的区别?

c - 取消引用链表中的指针

C++ const char* 和 const char[] 的区别

sql - 错误: incompatible types when initializing type 'char *' using type 'double'

c++ - 如何从 C 或 C++ 文件中删除字节?

c - 将多个空格和制表符替换为单个空白和制表符的程序