C语言学习笔记(六)字符串

时间:2020-12-01 01:32:06

C语言学习笔记(六)字符串

我们都知道C语言中没有字符串这种数据类型,不像Java直接有一个String类,String类提供了很多方法,可以满足我们的所有操作。那C语言中的字符串是怎么表示的呢?

C语言中用字符数组来表示字符串,可以把char数组当做一种特殊的数组,不仅可以使用数组的特点,C语言大牛们还提供了许多方法类使它作为字符串操作。下面分别从初始化、基本操作来说明,关于它与指针的关系将在下篇文章中来说明。

    既然C语言中的字符串是用字符数组来表示,那它有什么特点呢?

1、C系统在用字符数组存储字符串常量时会自动加一个'\0'作为结束的标志。

2、C语言的字符串是以'\0'结尾的

3、C语言中的字符串可以分配在栈空间、堆空间和只读存储区

    字符串的初始化:

字符串的初始化可以分为两个方法:默认元素个数、指定元素个数

//指定元素个数

int main11()

{

//1 {}号法 初始化列表

//数组初始化有2种方法 默认元素个数、指定元素个数

char buf1[] = {'a', 'b', 'c', 'd', 'e'}; //若没有指定长度,默认不分配零

//若指定长度,不够报错;buf长度多于初始化个数,会自动补充零

char buf2[6] = {'a', 'b', 'c', 'd', 'e'};

char buf3[6] = {'a', 'b', 'c', 'd', 'e'};

//char buf4[5] = {'a', 'b', 'c', 'd', 'e'};

printf("buf3:%s", buf3);

system("pause");

}//建议指定元素个数时,数组的长度要比所给的字符长度大,否则会产生很多意想不到的错误。


int main12()

{

//1 用字符串来初始化数组

char buf2[] = {'a', 'b','c','d','\0'};

//2 字符串常量初始化一个字符数组

char buf3[] = {"abcde"}; //结论:C语言中字符串字面量的末尾都有一个隐藏的'\0'

char buf4[] = "abcde"; //这里buf4的长度是5

char buf5[100] = "abcde";   //这里数组的其余部分都自动补'\0'

 //char buf6[100];

//buf6 = "Media Player";   //这句话是错误的,我们不可以将字符串字面量的地址赋值给数组名字。这将改变数组的指向,C语言是不允许的。

printf(" strlen(buf5) :%d \n", strlen(buf5));

printf(" sizeof(buf4) :%d \n", sizeof(buf5));

printf(" sizeof(buf4) :%d \n", sizeof(buf4));

}

//

//strlen()求字符串的长度,注意字符串的长度不包含\0

//sizeof(类型)字符串类型,的大小,包括\0


这样就对字符数组的初始化有了了解,再总结一下:

1、当我们给指定长度的数组初始化时,如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给

数组中前面那些元素,其余的元素自动定义为空字符('\0')

2、没有指定数组的长度时,字符串的末尾有一个隐藏的'\0'

字符串的存储:

讲到字符串的存储,就必须要了解字符串字面量,定义字面量时通常将其分配在字面量池中,这个内存区域保存了组成字符串的字符序列。多次用到同一个字面量时,字面量池中通常只有一份副本。通常认为字面量时不可变的,因此只有一份副本也不会有什么问题。

字符串的位置小结:

char *globalHeader = "Chapter";

char globalArrayHeadder[] = "Chapter";

void displayHeader()

{

static char *staticHeader = "Chapter";

char * localHeader = "Chapter";

static char staticArrayHeader[] = "Chapter";

char localArrayHeader[] = "Chapter";

char *headHeader = (char *)malloc(strlen("Chapter")+1);

strcpy(headHeader, "Chapter");

}

C语言学习笔记(六)字符串

从上面可以看出:

1、字面量字符串可以再任何地方使用它

2、定义一个数组,会把字符串字面量的值重新copy一份到数组中

3、字符串字面量只有一个,不管有多少个指针指向它

字符串的操作:

  C语言提供了一些操作函数来操作字符串,这些函数使用之前需要引入头文件#include <string.h>

(1)puts函数——输出字符串

int  puts (const char*);

起作用是将一个字符串(以'\0'结尾的字符序列)输出到终端。用puts输出的字符串中可以包含转义字符,



(1)比较字符串

int strcmp(const char *s1, const char *s2);

返回值为负数:如果按字典排序,s1比s2小就返回

返回值为0:两个字符串相等就返回0

返回值为正数:如果按字典顺序,s1比s2大就返回