c语言字符串

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、字符串传参和返回

字符串的传参实际上传递的是首字符的地址

字符串作为函数返回,也是返回首字符的地址

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值