初学字符串,你可以分得清字符常量和字符数组所占字节和长度吗?今天我们就来讲讲
-
字符串
用“”表示,一定以“\0”结尾,但我们看不见,在用strlen函数计算长度时也不计算它,但在分配时给分配字节,打印时结尾有“\0",才可以打印.
e.g1:char frr[]=“abcd”;//为5个字节,有“\0",可以打印
e.g2:char hrr[]=“ab\0cd”;//称为数组常量,为5个字节,因为数组在只管分配内存,打印出来为:ab.
e.g3:char grr[5]=“abcde”//6个字节,但是并不会打印,因为没有\0
e.g4:char *krr=“abdc”//4个字节,为指针,称为字符常量,可以打印。 -
区分一下字符数组和字符常量
-
char err[]=“abcd”//字符数组
表示一个数组,自己定义的,可以进行修改所以err[0]=‘x’;正确
-
字符常量
char *hrr=“abcd”,表示hrr放字符串的首地址,不能进行改变,只为可读的,所以hrr[0]=‘x’;错误程序会出现崩溃,因为地址为常量,不能改,非法的操作 -
看看自己是否真的掌握了:
int main()
{
char str[100]="abcde";//占了100个字节,长度为5
char str2[]="abcde";//占了6个字节有\0,长度为5
char *str3="abcde";//为指针,所以4个字节,占了五个长度
char str4[100]="abcdef\0gh";//占了100个字节,长度为6个,因为有\0停止了计算
char str5[]="abcdef\0gh";//占了10个字节有\0的,数组只管分配,长度为6
char *str6="abcdef\0gh";//因为为指针,所以4个字节,长度为6;
printf("%d,%d",sizeof(str),strlen(str));//c的字符串函数,前面加头文件名<string.h>
printf("%d,%d",sizeof(str2),strlen(str2));
printf("%d,%d",sizeof(str3),strlen(str3));
printf("%d,%d",sizeof(str4),strlen(str4));
printf("%d,%d",sizeof(str5),strlen(str5));
printf("%d,%d",sizeof(str6),strlen(str6));
}
你们觉得掌握的怎么样呢?