所以我试图在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
。这是正确的方法吗?
答案 0 :(得分:0)
问题是由隐式促销规则引起的。在您的示例中:
a + '0'
您要添加int
和char
。由于它们不同,因此必须将其中一个转换为另一个。因为char
通常是8位而整数通常是32位(在C中并不总是如此,但对于这一点并不重要),实际执行的是:
a + (int)'0'
长话短说,结果将是int
。要删除此警告,请执行以下操作:
(char) (a + '0') // or (char)a + '0'
注意:对于您的用例,您只需执行(char)a
,结果就是正确的。
答案 1 :(得分:0)
尝试使用此类型的类型转换,但是您应输入ascii值为no,例如在这种情况下,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;
}
答案 2 :(得分:0)
字符文字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
也是如此。
BTW:请注意,数据类型char
与数据类型int
不同,因为char
始终保证大小为1。
请注意:当您拥有char x = 5;
时,x + '0'
这样的表达式也会提供int
数据类型,因为'0'
的类型为int
。