字符串
字符串是以空字符(\0)结尾的char类型数组。
在程序中定义字符串
字符串字面量
用双引号括起来的内容称为字符串字面量,也叫做字符串常量。
char greeting[50] = "Hello!";
字符串常量属于静态存储类别,这说明如果在函数中使用字符串常量,该字符串只会被储存一次,在整个生命周期存在。
数组和指针的区别
char ar1[] = "Something is point at me.";
char * pt1 = "Something is point at me.";
- 在数组形式中,ar1是地址常量。不能更改ar1,如果改变了ar1,则意味着改变了数组的存储位置(即地址)。可以进行类似ar1+1这样的操作,标识数组的下一个元素。但是不允许进行++ar1这样的操作。
- 指针变量(pt1)最初指向该字符串的首字符,但是它的值可以改变。因此可以使用递增运算符,++pt1将指向第二个字符’o’。
总之,初始化数组把静态存储区的字符串拷贝到数组中,而初始化指针只把字符串的地址拷贝给指针。
字符串函数
输入、输出函数
puts()
接受一个字符串,输出到屏幕上,末尾自动加换行符。
fgets()和fputs()
fgets(char类型数组,int,文件指针)
- fgets()函数的第二个参数指明了读入字符的最大数量。如果是n,那么fgets()将读入n-1个字符,或者读到遇到的第一个换行符为止。
- 如果fgets()读到一个换行符,会把它存储在字符串中。
- fgets()函数的第三个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数。
- fgets()返回指向char的指针,如果一切进行顺利,返回的地址应与第一个参数地址相同;若读到文件结尾,返回空指针(NULL)。
fputs(char类型数组,文件指针)
- fputs()函数的第二个参数指明要写入数据的文件,如要打印在显示器上,用stdout(标准输出)。
- fputs()不会在末尾加换行符。
字符串函数
strlen()
- 接受一个字符串作为参数,返回它的长度。
strcat()和strncat()
- strcat()用于拼接字符串,接受两个字符串作为参数,把第二个字符串的备份附加在第一个字符串末尾,返回第一个参数(即拼接后第一个字符串的地址)。
- strncat()前两个参数与strcat()相同,第三个参数指定了最大添加字符数。例如,strncat(bugs,addon,13)将把addon字符串的内容附加给bugs,在加到第13个字符或遇到空字符时停止(无论哪种情况都要添加空字符)。
strcmp()和strncmp()
- strcmp()接收两个字符串作为参数,若相同则返回0,strcmp()依次比较每个字符直到发现不同的字符为止,比较的依据是机器排序序列,即字符的数值,通常是ASCⅡ值(第一个参数的减去第二个参数的)。
- strncmp()函数在比较两个字符串时,可以比较到字符不同的地方,也可以只比较第3个参数指定的字符数。
strcpy()和strncpy()
- strcyp()是字符串赋值函数,接受两个字符串指针作为参数,可以把指向源字符串的第2个指针声明为指针、数组或字符串常量;而指向源字符串副本的第一个指针应指向一个数据对象(如,数组),且该对象有足够的空间储存源字符串的副本。声明数组将分配存储数据的空间,声明指针只分配存储一个地址的空间。
- strcpy()返回类型是 char *,是第一个参数的值,即一个字符的地址。第一个参数不必指向数组的开始,这个属性可以用于拷贝数组的一部分。
- strncpy()第3个参数指明可拷贝的最大字符数。
sprintf()
- 第一个参数是一个char类型数组,把获取的输入格式化为表纯形式储存在其中。(类比printf)。
char *strchr(const char * s, int c);
- 如果s字符串中包含c字符,返回指向s字符串中首次出现c字符的地址,没找到,返回NULL。
char *strrchr(const char * s, int c);
- 如果s字符串中包含c字符,返回指向s字符串中最后出现c字符的地址,没找到,返回NULL。
char *strpbrk(const char *s1, const char *s2);
- 如果s1字符串中包含s2字符串中的任意字符,返回s1中首次出现s2中字符的地址,否则返回NULL。
char *strstr(const char *s1, const char *s2);
- 该函数返回s1字符串中s2字符串出现的收位置,否则返回NULL。