Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C语言中字符串结束符探究

C语言中字符串结束符探究#include <stdio.h>
#include <string.h>
int main()
{
        char *a = "hello world";
        int i = 0;
        for(i = 0; i < 12; i++)
                if(a[i] == "")
                        printf("\0 ");
                else
                        putchar(a[i]);
//输出结果为:hello world    表明字符串常量最后默认会添加一个""这个字符串结束符。
        printf(" ");
        printf("The length of "hello world" = %d ",strlen(a)); 
//输出结果为: 11 。表明strlen不包括"’这个字符串结束符。
        printf(" ");        char buf[10] = "helle world";
        for(i = 0; i < 11; i++)
                if(buf[i] == "")
                        printf("\0 ");
                else
                        putchar(buf[i]);
/**输出为 hello worl@   。输出了11个字节。最后一个字节不是"",而是@(这个字节是随机的)。
从上面情况可以看出,将数组中赋值字符串常量时,如果字符串常量长度大于数组长度,数组最后一位并不是"",如果字符串常量长度小于数据长度,那么数据中剩余部分将会用""补全。如buf[10] = "hello",那么buf的buf[5] ---buf[9]都将会被填充为""
**/
        printf(" ");
        char *b = "hello world";
        char ba[10] = "hello world";
        printf("&a = %p,&b = %p,&buf = %p,&ba = %p ",a,b,buf,ba);
        if(*(a+11) == "")
                printf("\0 ");
        return 0;
}推荐阅读:C++ 隐式类类型转化 Implicit Class-Type Conversions http://www.linuxidc.com/Linux/2013-01/78071.htmC语言变长数组之剖析 http://www.linuxidc.com/Linux/2013-07/86997.htmC语言需要注意的问题 http://www.linuxidc.com/Linux/2013-05/84301.htmC语言位域的使用及其注意点 http://www.linuxidc.com/Linux/2013-07/87027.htmC语言中简单的for循环和浮点型变量 http://www.linuxidc.com/Linux/2013-08/88514.htm《C语言从入门到精通》.(王娣,韩旭 ).[PDF] + DVD视频光盘文件 http://www.linuxidc.com/Linux/2013-10/91775.htm1. 从“hello worl@”输出结果可以看出,数组可以容纳的最大字符串数并不是数组长度-1,而是数组的长度。2. “hello world”这个字符串常量有一个固定的地址,a指针和b指针都指向了字符串常量“hello world”的地址。并且a+11的地址内容为‘"(a+10地址内容为’d")说明,字符串常量占用的字节数确实是字符串常量长度+1,最后一位为""。3.那么为什么当数组长度小于字符串常量长度时,数组中最后一位容纳的不是""?,且数组首地址并不是指向"hello world"字符串常量地址,说明在定义数组时,开辟了一个内存空间,当把字符串常量赋值给数组变量时,将字符串常量内容复制到数组变量自己的内存中,如果字符串常量长度大于数据长度,那么大于数组长度部分将会被忽略,当数组长度大于字符串常量长度时(字符串常量长度为strlen值+1),数组中未填充部分将以""补充。