C和C++字符字节数大小问题
来源:互联网 发布:宽带网络测试仪 编辑:程序博客网 时间:2024/06/05 08:23
学过C或者C++的同学一想到字符肯定首先想到的是占用一个字节的存储空间,但事实真的如此吗。
先看一段代码:
#include <stdio.h>int main(void){ printf("sizeof(char)=%ld\n", sizeof(char)); printf("sizeof('A')=%ld\n", sizeof('A')); return 0;}
通过GCC编译器编译得出结果:
再来看看同样代码的G++编译的结果:
char字符类型无论是在C还是C++中都是占单个字节的,毕竟组成字符串的基础类型,不是单字节就问题大了。
而字符常量,比如’A’、’B’、’c’这种在C语言中单个占用4个字节,而在C++中单个占用1一个字节,是否觉得奇怪,为什么会这样。原因就是:C语言把字符当做小整数进行处理。字符常量实际上是int类型而不是char类型!而在C++中则会直接把字符常量当做char类型进行处理!
看了上述结果的而又喜欢用C语言字符数组或字符指针做字符串而不是C++string做字符串的同学可能会多思考一些问题了,如果字符常量是占用4个字节,那么char arr[10] = {‘A’, ‘B’, ‘C’, ‘d’};这样的数组是否会越界呢?
#include <stdio.h>int main(void){ const char arr[10] = {'A', 'B', 'C', 'd'}; printf("arr=%s\n", arr); if (arr[4] == '\0') printf("fifth char='\\0'\n"); return 0;}
GCC编译器编译后结果为:
很明显,在初始化char数组的时候,由于元素类型必须是char类型,所以字符常量直接转换成char类型了。当然,char类型具体是有符号还是无符号也是一个问题,有些编译器当成有符号,有些编译器当成无符号,甚至有的可以自己选择char是有符号还是无符号。但是作为程序员总是要注意:忽略语法具体的差异性就是在拿程序的安全性冒险!
1 0
- C和C++字符字节数大小问题
- C的大小端和字节对齐
- c/c++类型和字节大小整理
- 【c基础】字符串、字符和字节
- c和指针 -- 字符串、字符、字节
- 大话C中字节序即大小端问题1
- 大话C中字节序即大小端问题2
- C和C++中的主要数据类型和字节大小
- C和C++中的主要数据类型和字节大小
- [C#]大小端字节序(Big Endian和Little Endian)
- 第九章 字符串、字符和字节[C和指针]
- C和指针读书笔记——字符串、字符和字节
- 《C和指针》第九章 字符串、字符和字节
- c和指针(6)字符串、字符和 字节篇
- .NET(C#):字符编码(Encoding)和字节顺序标记(BOM)
- C语言学习之字符串、字符和字节第一讲
- C语言学习之字符串、字符和字节第二讲
- C语言学习之字符串、字符和字节第三讲
- 视图动画
- jsp页面中,以radio赋值(与 “jsp页面中,以radio取值” 成对)
- Oracle之存储过程
- 输入表单输入完一个后按住enter光标自动跳到下一个表单
- vue -- v-cloak解决刷新或者加载出现闪烁(显示变量)
- C和C++字符字节数大小问题
- Java interface
- POI2008 BZOJ 1116 CLO -并查集-基环树
- 别人都在做微商?切不可盲从
- JAVA设计模式之适配器模式
- Sublime Text 3 3126 注册码
- Android7.0 Gralloc模块的加载
- CF 793D Presents in Bankopolis
- 互联网三大暴利项目揭秘,日赚上万,家常便饭!