第一:写这篇文章源于我对'\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++字符数组和字符串大揭秘的更多相关文章

  1. C++基础之字符数组和字符串

    无意中发现了一个非常有意思的技术类型小品文系列,通过大牛指导菜鸟的方式,解说讲C++知识,有的非常基础却是开发中easy忽略的地方. [Elminster的专栏] http://blog.csdn.n ...

  2. C语言中整形数组、字符数组、字符串的区别

    一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...

  3. Base-64 字符数组或字符串的长度无效等问题解决方案

    项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件…… ...

  4. C语言中字符数组和字符串指针分析

    这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

  5. Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)

    Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a n ...

  6. c语言字符数组与字符串的使用详解

    转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

  7. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  8. C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决

    最近用base64编码传图片遇到了点问题,总结下. 首先总结下base64编码的逻辑,来自网络:https://www.cnblogs.com/zhangchengye/p/5432276.html ...

  9. C语言基础复习:字符,字符数组,字符串,字符指针

    1. 概述2. 字符2.1 字符定义和大小2.2 字符的输入和输出2.3 字符的计算3. 字符数组3.1 字符数组的定义和大小3.2 字符数组的输入和输出3.3 字符数组的计算4. 字符串4.1 字符 ...

随机推荐

  1. ES6学习笔记:Module的基本用法

    export和import ES6实现了模块功能,试图解决JavaScript代码上的依赖和部署上的问题,取代现有的CommonJs的AMD规范,成为浏览器和服务器通用的模块解决方案. 模块功能有两个 ...

  2. 编写EL函数

    1.建立java类的静态函数 package chapter4; public class ELFun { public static String processStr(String s){ s = ...

  3. HDU 3589 Jacobi symbol

    彻底对数学绝望了 #include <cstdio> #include <cmath> int flag[1005],p[500],a; int d[100]; int ini ...

  4. HDU 2815 Mod Tree

    不会,先搁着…… http://blog.csdn.net/acm_cxlove/article/details/7832197

  5. ORACLE中date类型字段的处理

    (1)在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98' 在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月 ...

  6. ios7毛玻璃效果实现

    首先看效果:       核心代码: //加模糊效果,image是图片,blur是模糊度 - (UIImage *)blurryImage:(UIImage *)image withBlurLevel ...

  7. projecteuler----&gt;problem=8----Largest product in a series

    title: The four adjacent digits in the 1000-digit number that have the greatest product are 9 9 8 9 ...

  8. openstack之cinder

    一.cinder概述: 1.F版之前,并没有cinder,对应的组件为nova-volume:以Rest API的形式提供服务 2.cinder目标: 减少nova的复杂性,降低nova的负载,支持多 ...

  9. Sass入门——基本特性-基础

    本文来自慕课网大漠 声明变量 三个部分:1.声明变量的符号"$"2.变量名称3.赋予变量的值 $brand-primary : darken(#428bca, 6.5%) !def ...

  10. 使用数据库绑定ListBox控件

    1. The HTML Markup <div> <asp:ListBox ID="ListBox1" runat="server">& ...