1、在C语言中,表示字符串的方式
常量:"hello world"
字符数组:char str1[100] = "hello world";
字符指针: char *str2 = "hello world"; char *str3; str3 = "hello world"; 字符指针常量,尽量不要去使用
字符串的输入输出
输入: scanf("%s", str); //输入字符串,输入不了空格 scanf("%[^\n]", str); //输入字符串,输入空格 gets();使用不安全,因为不会停止接收 标准IO:fgets() 输出: printf("%s\n", str); //puts(); 仅限于输出字符串
2、字符数组和字符指针有什么区别?
char str1[100] = "hello world"; //字符数组
char *str2 = "hello world"; //字符指针常量
printf("str1[4] = %c\n", str1[4]); printf("str2[4] = %c\n", str2[4]);
str1[4] = 'c'; //可以 str2[4] = 'c'; //不可以,
str2是字符指针常量,常量不能做任何修改,编译是检查不出错误的,只有运行才会出错 printf("str1[4] = %c\n", str1[4]); printf("str2[4] = %c\n", str2[4]);
3、常用的字符串处理函数
原因:在C语言里面,字符串不能做直接赋值的,比如:字符数组定义之后,不能直接赋值,字符指针定义之后,最好也不要直接赋值,因为直接赋值,字符指针会蜕变成字符指针常量,常量不能修改的,所以,在后面的使用过程中,就只能使用,不能更改,一改就错误
char str[100]; // str = "hello world"; //错误
char *s = malloc(100);
s = "hello world"; //直接赋值,可以,但是指针变量会蜕变成字符指针常量
// s[4] = 'c'; //字符指针常量不能做任何修改,编译是检查不出错误的,只有运行才会出错
我们使用一个函数,需要知道:函数功能,参数,返回值类型
如果函数是自己定义的,需要考虑需不需要声明
函数如果不是自己定义的,在本文件中也没有函数的声明???
需要找到这个函数声明在那个头文件:#include
如果是一个没有使用过的函数,怎么去查看这个函数怎么使用?
(1)标准C库,系统提供的API接口函数
1、man手册,2、百度,3、《linux_C函数库中文手册.pdf》
(2)外部来源函数(别人设计的函数)?需要拿到函数接口文档
3.1、strlen 字符串长度的函数
头文件 #include <string.h>
定义函数 size_t strlen(const char *s);
函数说明 strlen()用来计算指定的字符串 s 的长度, 不包括结束字符"\0". 返回值 返回字符串 s 的字符数.
范例 /*取得字符串 str 的长度 */
3.2、strcpy 字符串拷贝函数
相关函数 bcopy, memcpy, memccpy, memmove
头文件 #include <string.h>
定义函数 char *strcpy(char *dest, const char *src);
函数说明 strcpy()会将参数 src 字符串拷贝至参数 dest 所指的地址. 返回值 返回参数 dest 的字符串起始地址. 附加说明 如果参数 dest 所指的内存空间不够大, 可能会造成缓冲溢出(buffer Overflow)的错误情况, 在编 写程序时请特别留意, 或者用 strncpy()来取代.
3.3、strcat 字符串拼接函数
相关函数 bcopy, memccpy, memcpy, strcpy, strncpy
头文件 #include <string.h>
定义函数 char *strcat(char *dest, const char *src);
函数说明 strcat()会将参数 src 字符串拷贝到参数 dest 所指的字符串尾. 第一个参数 dest 要有足够的空间来 容纳要拷贝的字符串. 返回值 返回参数 dest 的字符串起始地址
3.4、strcmp 字符串比较
相关函数 bcmp, memcmp, strcasecmp, strncasecmp, strcoll
头文件 #include <string.h>
定义函数 int strcmp(const char *s1, const char *s2);
函数说明 strcmp()用来比较参数 s1 和 s2 字符串. 字符串大小的比较是以 ASCII 码表上的顺序来决定, 此顺序 亦为字符的值. strcmp()首先将 s1 第一个字符值减去 s2 第一个字符值, 若差值为 0 则再继续比较下个字符, 若 差值不为 0 则将差值返回. 例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33). 返回值 若参数 s1 和 s2 字符串相同则返回 0. s1 若大于 s2 则返回大于 0 的值. s1 若小于 s2 则返回小于 0 的 值.
3.5、strstr 在大的字符串里面找小的字符串
相关函数 index, memchr, rindex, strchr, strpbrk, strsep, strspn, strtok
头文件 #include <string.h>
定义函数 char *strstr(const char *haystack, const char * needle);
函数说明 strstr()会从字符串 haystack 中搜寻字符串 needle, 并将第一次出现的地址返回. 返回值 返回指定字符串第一次出现的地址, 否则返回 0.
3.6、strtok 分割字符串 //格式化分割字符串sscanf
相关函数 index, memchr, rindex, strpbrk, strsep, strspn, strstr
头文件 #include <string.h>
定义函数 char * strtok(char *s, const char *delim);
函数说明 strtok()用来将字符串分割成一个个片段. 参数 s 指向欲分割的字符串, 参数 delim 则为分割字符串, 当 strtok()在参数 s 的字符串中发现到参数 delim 的分割字符时则会将该字符改为\0 字符. 在第一次调用时, strtok()必需给予参数 s 字符串, 往后的调用则将参数 s 设置成 NULL. 每次调用成功则返回下一个分割后的字 符串指针. 返回值 返回下一个分割后的字符串指针, 如果已无从分割则返回 NULL.
3.7、strchr ( 查找字符串中第一个出现的指定字符)从左开始
3.8、strrchr ( 查找字符串中最后出现的指定字符)从右开始
4、字符串传参和返回
字符串的传参实际上传递的是首字符的地址
字符串作为函数返回,也是返回首字符的地址