中文占2字节,但是为何能用1字节的char来接受?应该要报错才对,(当然最后运行会出现乱码)
我问的是为什么不会报错,不是问为什么会出现乱码
C语言,C++中,char i = '问';这里是否存在强制转换?*****
答案:6 悬赏:30 手机版
解决时间 2021-01-01 18:31
- 提问者网友:沦陷
- 2021-01-01 10:24
最佳答案
- 五星知识达人网友:人類模型
- 2021-01-22 03:54
存在。
Visual C++ 2013:
warning C4305:“初始化”: 从“int”到“char”截断
GCC 4.8.1:
[Warning] multi-character character constant [-Wmultichar]
这里没有必要报错,只是一个丢失精度的转换而已。
C++的字符不仅与字符类型的“容量”有关,还与文本编辑器、编译器使用的字符、输出系统使用的字符集有关。
目前C++提供了支持UTF8 UTF16 UTF32编码的字符类型: char、wchar_t、char16_t、char32_t
但是实际的字符输入输出还是依赖具体环境。
字符处理还是依靠第三方库来完成。
Visual C++ 2013:
warning C4305:“初始化”: 从“int”到“char”截断
GCC 4.8.1:
[Warning] multi-character character constant [-Wmultichar]
这里没有必要报错,只是一个丢失精度的转换而已。
C++的字符不仅与字符类型的“容量”有关,还与文本编辑器、编译器使用的字符、输出系统使用的字符集有关。
目前C++提供了支持UTF8 UTF16 UTF32编码的字符类型: char、wchar_t、char16_t、char32_t
但是实际的字符输入输出还是依赖具体环境。
字符处理还是依靠第三方库来完成。
全部回答
- 1楼网友:duile
- 2021-01-22 07:36
有啊。int a=100; char b =(char) a; 就是把 4 字节长的整型 转成 1 字节 长 的 char 型。
char b = 'd'; // ascii 码值 100
int a = (int) b; // 数值 100
就是把 1 字节长的char 转成 4 字节 长 的 int 型。
char 本身就是 1字节长 的整型。 只要数值范围 不超界,可以强制转换。
- 2楼网友:忘川信使
- 2021-01-22 06:06
这种他在编译的时候它不会检查的,就像它不会检查&a中的&一样,它默认你写的是不会溢出
- 3楼网友:躲不过心动
- 2021-01-22 05:19
对呀!char i = 'abc'也不同样不报错吗?中文是由两个字节存储的,和'abc'一样,只读取后面的那一个字节。
- 4楼网友:胯下狙击手
- 2021-01-22 07:40
我明天再问问老师,叫他解释下这个问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯