个人理解—C语言的字符串类型

        字符串,是由多个字符打包而成的数据结构,但是在C语言中并不存在原生类型的字符串类型。

        C语言中的字符串是利用字符指针实现的,定义样式为:

char *str=“linux”;
printf("%s\n",str1);

        其在C语言中由多个字节连续分布构成,很像是数组,但是请区分字符数组与字符串。在c语言中字符串有以下特点:①指针指向字符串头。②串尾固定为\0。③空间连续分布。

        \0表示NULL,ASCII编码为0,数字0的ASCII编码为48。注意区分。

        由于\0是字符串的结束标志,所以字符串中不能包含有\0,因此\0也就成为了C语言中的魔数(被定义有特殊意义的符号)。

        char *str="linux";其分配在代码段占有6个字节但如果加上指针本身,那么就占有10个字节(4字节指针大小+5字节符号大小+1字节\0)。

        sizeof()不是函数,而是运算符,在计算字符串时会将“\0”计入,但是如果越界则会返回占用内存字节大小。

char a[]="linux";
char *b="linux";

sizeof(a);输出5
sizeof(b);输出6

        strlen()是库函数,计算以字节为单位,计算字符串时不包含"\0"。

char a[5];
sizeof(a);输出5
strlen(a);输出5

char b[5]={0};
sizeof(a);输出5
strlen(a);输出0

char c[5]={2,3};
sizeof(a);输出5
strlen(a);输出2

char a[]="linux";
sizeof(a);输出6
strlen(a);输出5

char *p="linux";
sizeof(a);输出4 指针大小
strlen(a);输出5 字符串长度

        strlen函数是对\0进行判定,如果数组越界情况下,可能出现错误(脏栈)。

        char *p="linux"中,p指针放在栈上,而内存中(代码段)真的存在“linux”字符串,p指向"l"的首地址。

        char a[]="linux",相当于a[]={"l","i","n","u","x"};内存中并没有linux这个字符串。

        数组是自带内存的,字符串是指针不存在内容,其只是指针。

        将字符串存放在栈上:

char a[7];
char *p=a;

         字符串存放在数据段:

char a[7];全局变量
char *p=a;

        字符串存放在堆上:

char *p=(char *)malloc(7);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值