c/c++字符数组和字符串大揭秘
第一:写这篇文章源于我对'\0'和“\0”的探讨
当我对char a []="\0";
int size_a=sizeof(a); //结果为2
当时我很纳闷字符串不是以'\0'结束吗,然后我又测试 :
char a[]="b\0";
cout<<sizeof(a); //结果为3
再次测试:
char a[]="\0\0\0";
cout<<sizeof(a); //结果为4
最后测试:
char a[]="";
cout<<sizeof(a); //结果为1
通过测试发现字符串里的\0是系统自动添加,而且不管你原串里是否有\0;
第二:
示例一:int main(int argc, char *argv[])
{ char str[] = {'H','e','l','l','o'};
char bb[]={
'a','b','c','D'
};
cout<<bb<<endl;
输出结果如下:注意每次运行输出结果最后0后面的那个字符会不一样

示例二:int main(int argc, char *argv[])
{ char str[] = {'H','e','l','l','o'};
char bb[]={
'a','b','c','D'
};
cout<<str<<endl;
输出结果如图

为什么图一输出的结果是abcDHello*(*号表示随机字符)?我们可以推测出由于采用栈的存储结构,所以在函数中先定义的先压栈测试如下面的
示例三:
int main(int argc, char *argv[])
{ char str[] = {'H','e','l','l','o'};
char bb[]={
'a','b','c','D'
};
char cc[]={
'A','B'
};
cout<<cc<<endl;
输出结果如下图:

然后我们探讨一下最末尾为啥就一个随机数字呢,
int main()
{
char str[] = {'H','e','l','l','o'};
char bb[]={'a','b','c','D' };
char cc[]={'A','B'};
bb[7]='\0';
cout<<bb<<endl;
结果如下图,如果对b[7]='\0',那么输出截止到bb后面第七个

以上测试是在mingw gcc version3.2测试的,用的是cfree,注意我用vs2010测试结果不一样啊
测试如图

地址高的地方在栈底,输出的时候,比如输出cc吧,ab烫烫abcd烫烫几下,然后hello在烫几下最后输出也结束,至于最后为啥结束,我再探讨ing
希望大牛斧正!
c/c++字符数组和字符串大揭秘的更多相关文章
- C++基础之字符数组和字符串
无意中发现了一个非常有意思的技术类型小品文系列,通过大牛指导菜鸟的方式,解说讲C++知识,有的非常基础却是开发中easy忽略的地方. [Elminster的专栏] http://blog.csdn.n ...
- C语言中整形数组、字符数组、字符串的区别
一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...
- Base-64 字符数组或字符串的长度无效等问题解决方案
项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件…… ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
- Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)
Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a n ...
- c语言字符数组与字符串的使用详解
转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...
- c语言中的字符数组与字符串
1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...
- C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决
最近用base64编码传图片遇到了点问题,总结下. 首先总结下base64编码的逻辑,来自网络:https://www.cnblogs.com/zhangchengye/p/5432276.html ...
- C语言基础复习:字符,字符数组,字符串,字符指针
1. 概述2. 字符2.1 字符定义和大小2.2 字符的输入和输出2.3 字符的计算3. 字符数组3.1 字符数组的定义和大小3.2 字符数组的输入和输出3.3 字符数组的计算4. 字符串4.1 字符 ...
随机推荐
- 我用过的Linux命令--关闭防火墙
关闭防火墙: 防火墙的弄能是限制某一些端口的使用,可以通过linux命令关系它,相应的指令: 查看防火墙信息: #service iptables status 就能看到防火墙的状态: 关闭防火墙: ...
- poj 1753 Flip Game 高斯消元
题目链接 4*4的格子, 初始为0或1, 每次翻转一个会使它四周的也翻转, 求翻转成全0或全1最少的步数. #include <iostream> #include <vector& ...
- Vistual Studio 2010 调试无法进断点
系统是2003出现的问题 win8就没事 打sp1 补丁就行
- Lotus Sametime 服务器的安装和配置
IBM Lotus Sametime 是一款强大的实时协作软件,目前最新版本是 7.5.1.通过它,您不仅能够进行网络聊天,而且可以方便地召开网络会议.在网络社区中与其他人进行沟通.了解更多关于 Lo ...
- 20 你应该知道的PHP库
下面是一些非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法. 图表库 下面的类库可以让你很简的创建复杂的图表和图片.当然,它们需要GD库的支持. pChart – 一个可以创 ...
- zookeeper 数据存储特点
zookeeper 和elasticseaarch 数据存储特点: 1.zookeeper; [Zookeeper提供的一致性是弱一致性,首先数据的复制有如下规则:zookeeper确保对znode树 ...
- 基于Visual C++2013拆解世界五百强面试题--题17-程序结果分析1
分析程序结果,分析过程我们就写在程序注释里面. 写出下列代码的输出内容 #include <stdio.h> int inc(int a) { return (++a); } int mu ...
- HDU 4521 小明系列问题——小明序列 (线段树维护DP)
题目地址:HDU 4521 基本思路是DP.找前面数的最大值时能够用线段树来维护节省时间. 因为间隔要大于d. 所以能够用一个队列来延迟更新,来保证每次询问到的都是d个之前的. 代码例如以下: #in ...
- Objective-c 方法的调用
在书写了类的声明和实现后,应用程序如何去调用它呢? 在Objective-c中,调用方法的简单格式如下: 1⃣ [实例 方法]; 如: [person setAge:32]; 其中 pe ...
- nodejs hello world (调用文件执行没反应)
今天学习了node.js ,来看一下hello world 的写法. 1. 首先安装node.js的驱动文件.http://nodejs.org/ 2. a:安装好node之后,在CMD窗口输入nod ...