之前一直没有关注字符串的操作,以为嵌入式肯定用不到,这次播放器实验中用到了,需要在这里总结一下。
源文件放在strings.rar
1、字符串的赋值
C语言中,有两种方式可以存放字符串。字符数组和字符指针,见下面的程序。如果用数组的方式来存放,str0和str1是一种,把每个字符都分开写。str0有明确的数组长度,打印的时候,没有赋值的部分自动为0.而str1没有明确的长度,没有赋值的长度是不定的,而且打印出来,除了有效部分,还有打印中乱七八糟的东西。如果在str1的赋值末尾加上' ',就能明确限定长度了。str2是字符数组的另一种方式,肯定首选这个了。
要注意的是,字符指针指向的是字符串常量,是不能修改的。而字符数组是可以修改的。
2、字符串的打印
可以直接用printf("%s")来打印,也可以用循环的方式,通过判断末尾来打印,见程序中str3的打印。str0/1/2能用循环打印吗?当然也是可以了,但是不能通过str0/1/2++的方式,因为str0/1/2是数组,是字符常量。而指针是可以自由移动的,想打印str3所指向的字符串,第五个字符后面的部分,直接用str3=str3+5,然后用printf函数打印出来即可。
3、字符串的长度
见程序中printf函数的打印值,长度都在注释中。
#include <stdio.h> #include <strings.h> int main(void) { //数组和指针两种定义 char str0[20]={'I','L','O','V','E','Y','O','U'}; char str1[]={'I','L','O','V','E','Y','O','U'}; //初始化的时候可以这样,不能用于赋值,注意这个终止的 char str2[]="ILOVEYOU"; //{"ILOVEYOU"} 一样 char *str3="ILOVEYOU"; printf("str0 is %s ",str0); printf("str1 is %s ",str1); //ILOVEYOU$@&,如果str1有确定的长度,后面就不会乱了,长度比ILOVEYOU长点也没关系 printf("str2 is %s ",str2); //ILOVEYOU printf("str3 is %s ",str3); //ILOVEYOU printf("str2[5] is %c ",str2[5]); //ILOVEYOU while(*str3!='