1 字符串常量、字符数组
字符串常量是一对双撇号括起来的字符序列,例如:
"helloworld"、"12345"、""(一个空字符串)
如"helloworld"在内存中是:
h | e | l | l | o | w | o | r | l | d | \0 |
在C语言中,是将字符串作为字符数组来处理。了解这一点很重要。
规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。以字符'\0'作为字符串结束标志。'\0'是一个ASCII码为0的字符,即“空操作字符”,即它不引起任何控制动作,也不是一个可显示字符。注意,在写字符串时不必加'\0',否则会画蛇添足。'\0'字符是系统自动加上的。
所以,“helloworld”字符串长度为10,但是占用内存字节大小为11
printf("%d \n\r",strlen("helloworld"));
输出:字符串长度为10
printf("%d \n\r",sizeof("helloworld"));
输出:内存字节大小为11
定义一个字符串如:
char c[20]="helloworld";
就是用一个字符串常量来初始化一个字符数组。注意字符数组长度不能小于字符串常量的内存字节长度。
char c[20]="helloworld";
printf("%d \n\r",sizeof(c));
printf("%d \n\r",strlen(c));
输出:数组长度为20,数组中字符串长度(即有效字符个数)为10
或者定义时不指定数组长度:
char c[]=“helloworld”;
系统会自动根据字符串常量长度确定数组长度。
char c[]="helloworld";
printf("%d \n\r",sizeof(c));
输出:数组长度为11
也可以用""空字符串初始化一个字符数组:
char c[20]="";
printf("%d \n\r",strlen(c));
输出:字符串长度为0,即数组中所有字符为'\0'。
在语句中不能直接把一个字符串赋值给字符数组,如下面语句是不合法的:
char c[20];
c="helloworld";
就是说除了在定义时,你不能用赋值的方法给一个字符数组整体赋值。
这里通常需要使用函数strcpy(字符数组1,字符串2),作用是把字符串2复制到字符数组1中去,如:
char c[20];
strcpy(c,"helloworld");
printf("%s \n\r",c);
输出:helloworld
2 字符串与指针
上面讲了用字符数组存放一个字符串。还可以定义一个字符指针,用字符指针指向字符串。如:
char * string="helloworld";
对字符指针初始化,实际上是把字符串第1个元素的地址(即存放字符串的字符数组的首元素地址)赋给string。如图:
上面语句等价于下面语句
char * string;
string="helloworld";
就是string被定义为一个字符指针变量,指向字符型数据。
以上就是C语言中关于字符串的基本的但很重要的内容,大家需要去掌握。