C Primer Plus
第五版
第十一章 字符串和字符串函数
字符串:以字符'\0'结尾的char数组。
gets() puts() 参数为指针
在程序中第一字符串方式:1、使用字符常量 2、char数组 char指针 字符串数组
字符串常量又称字符串文字是 位于一对双引号中的任何字符,双引号里的字符加上编译器自动提供的结束标志'\0'字符.
字符串中间没有间隔或者间隔是空格符可以打印出则是一个字符串
如果想在字符串中使用双引号,可在双引号前加一反斜线符号。
指定数组大小时,一定要确保数组元素比字符串长度大一
const char m2[]=“If you can't think of anything ”初始化字符数组是体现编译器决定数组大小的一个优点
m3[] *m3
数组形式m3[]中 m3是个地址常量,不能更改m3,即不能用++运算(增量运算符只能用于变量名前,而不能用在常量前)可以使用m3+1来标识数组里的下个元素。
指针形式*m3 m3为变量 ++m3将指向第二个字符。
数组初始化从静态区把一个字符串赋值给数组
指针初始化只是复制字符串地址
差别: char heart[]="I love you";
char *head="I love you";
数组名heart常量(地址) 里面的数组元素为变量
指针 head 变量 head=heart;合法 反之不合法,
gets()读取换行符之前的所有字符(不含换行符)后添加一个空字符‘\0’。
gets()参数为指针,返回值为字符串地址,如果出错或遇到文件结尾就返回一个空地址空指针 '\0'或返回NULL(stdio.h中定义)
不检查预留存储区是否能容纳输入的数据,多了就会溢出
fgets()函数 fgets(*,n,stdin)
1、需要第二个参数来说明最大读入字符数,如果参数是n,最多读入n-1个字符。
2、fgets()读取到换行符就把它存放到字符串中,而不像gets()那样丢弃
3、需要第三个参数说明读取哪个文件,从键盘上输入可以用stdin作为参数。
字符串输出
puts()只需给出字符串参数地址,显示字符串时会自动加换行符。
fputs()需要第二个参数来说明要写的文件,不会自动加换行符。
void put(const char *string)
{
while(*string!='\0')
putchar(*string++);
}
int i=0;
while(string[i]!='\0')
putchar(string[i++]);
字符串函数
1、用strlen()函数可以得到字符串的长度
缩短字符串长度
void fit(char*string,unsigned int size)
{if(strlen(string)>size
*(string+size)='\0';
}
2、strcat()函数 两个指针参数
将第二个字符串拷贝到添加到第一个字符串结尾处构成一个全新的字符串,而第二个字符串没有改变,返回第一个参数值,但并不检查第一个数组是否能容纳第二个字符串。
3、strncat()函数 多一个参数来指明最多允许添加的字符数目
strncat(*,*,int)
4、strcmp() 可以用来比较存放在不同数组的字符串的大小,比较字符串而不是字符,相等则返回0;若不相等,如果第一个字符串在子母表的顺序先于第二个字符串,strcmp()返回一个负数,一直比较到最后 或找到不同的字符
5、strncmp()第三个参数 比较前几个字符
6、strcpy()函数在字符串运算中作用等价于赋值运算,将整个字符串复制到另一个数组中。两个参数,返回第一个参数,即一个字符的地址,第一个参数不需要指向数组的开始。
7、strncpy()第三个参数指明最大可复制的字符数
8、sprintf()作用和printf()一样 但他是写到字符串里而不是写到输出。第一个参数是目标字符串的地址,其余参数和printf()一样。 sprintf(char*,"", _);
int a;a=6;
printf("sizeof(a+1) is %d\n",sizeof(a++));
printf("sizeof(a+1) is %d\n",sizeof(a+1.0));
printf("%d",a);
输出显示: 4
8
6
sizeof()并不计算表达式里面的结果