【问题标题】:function which converts char into integer and returns the value [C]将 char 转换为整数并返回值的函数 [C]
【发布时间】:2018-06-09 11:26:47
【问题描述】:

所以我试图用 C 语言编写一个函数,将变量int 转换为char。在查看以前的线程时,我注意到最好的方法是像这样使用它:a + '0'

所以我做到了:

char intToChar(int a) {
   return a + '0';
}

虽然,我的 IDE (Clion) 警告我:

从返回“char”的函数返回“int”:“int”类型的值可能不适合接收器类型“char”

于是我尝试将其改成如下函数(将char替换为int):

int intToChar(int a) {
    return a + '0';
}

警告消失了。但这让我想知道这是否是正确的做法。我知道当函数返回char 它实际上返回int。但是函数的名称是intToChar,所以它应该返回char。这样做是否正确?

【问题讨论】:

  • 您的标题和您的代码似乎涉及相反的转换方向。
  • 你想发生什么,例如值 10?

标签: c char integer


【解决方案1】:

问题是由于隐式提升规则。在您的示例中:

a + '0'

您正在添加一个int 和一个char。由于它们不同,因此必须将这两者中的一个转换为另一个。由于char 通常是 8 位,而整数通常是 32(在 C 中并非总是如此,但就这一点而言并不重要),实际上执行的是:

a + (int)'0'

长话短说,结果将是int。要删除此警告,只需执行以下操作:

(char) (a + '0') // or (char)a + '0'

注意:对于您的用例,您可以简单地执行(char)a,结果将是正确的。

【讨论】:

  • 哦,我现在明白了。谢谢!
  • 好。请不要忘记将问题标记为已回答(左侧的复选标记)
【解决方案2】:

字符文字 0 与每个字符文字一样 - 类型为 int(例如,尝试打印 sizeof('0')

int main() {
    printf("sizeof '0' is ... %ld\n",sizeof('0'));
}

输出:

sizeof '0' is ... 4

所以像a + '0' 这样的表达式也会给出int。然后返回 int 函数定义返回类型 char 会导致此警告。

所以实际上你会按照你的建议写int intToChar(int a),而其他基于字符的函数,如tolower,也是类似的。

顺便说一句:请注意,数据类型 char 与数据类型 int 不同,因为根据定义,char 始终保证大小为 1。

注意:当你有一个char x = 5; 时,像x + '0' 这样的表达式也会给出int 数据类型,因为'0' 的类型是int

【讨论】:

    【解决方案3】:

    尝试这种类型转换的方法,但你应该输入 no 的 ascii 值,例如在这种情况下 ascii 值 2 是 50。

    #include <stdio.h>
    
    char intToChar(int a){
    
        char c=(char)a;
        return c;
    }
    
    int main(void) {
        // your code goes here
    
        int a=50;
        char c;
        c=intToChar(50);
        printf("%c",c);
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 2012-01-11
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 2016-03-05
      • 2013-10-12
      相关资源
      最近更新 更多