概述
由系统提供的对字符串处理的函数
所属头文件
string.h
strlen:测量字符串长度
语法
size_t strlen(const char *s);
参数
:
要测量的字符串
返回值
长度
注意
:
测量的长度不包括
\0
示例
char *str = "hello";
int len = strlen(str);
printf("str len=%d\n",len);
strcpy:拷贝字符串(深拷贝)
浅拷贝:拷贝的是地址
如
:
//char *str01 = "abc";//
此时
abc
在常量区
,str01
指向常量区
,
此时不能
对其值进行修改
char str01[] = "abc";//
将常量区的
abc
拷贝到
str01
所在的栈的区域
char *str02 = str01;//
此时产生浅拷贝
,
只拷贝了
str01
的地址
,
并没有拷
贝其值
,
那么此时
str01
与
str02
指向同一位置
str01[0] = 'A';//
当
str01
被修改后
,str02
打印的内容也将被修改
printf("str01 = %s\n",str01);
printf("str02 = %s\n",str02);
深拷贝:拷贝的是内容
如
:
char str01[] = "abc";
char *str02 = (char *)malloc(100);
memset(str02,0,100);
strcpy(str02,str01);//
使用
strcpy
函数对字符串拷贝为深拷贝
,
将
str01
的内容拷贝到
str02
中
,
此时
str01
与
str02
指向的地址不同
str01[0] = 'A';//
修改
str01
中的内容
,
并不会影响
str02
中的内容
printf("str01 = %s\n",str01);
printf("str02 = %s\n",str02);
语法
char *strcpy(char *dest, const char *src);
参数
:
dest:
目标位置
src:
资源位置
返回值
:
就是目标位置
作用:将src的内容赋值给dest
char *strncpy(char *dest, const char *src, size_t n);
参数
:
dest:
目标位置
src:
资源位置
n:
拷贝的字节数
返回值
:
就是目标位置
作用:将src前n个字节的内容赋值给dest
注意
:
使用该函数需注意目标位置指向的内存大小要足够
strcmp函数:比较字符串内容是否相同
语法
int strcmp(const char *s1, const char *s2);
参数
:
s1:
字符串
1
s2:
字符串
2
返回值
:
0
相同
非
0
不同
strchr函数:查询单个字符首次出现的位置
语法
char *strchr(const char *s, int c);
作用:
在
s
中查询
c
第一次出现的位置
参数
:
s:
被查找的字符串
c:
要查找的字符
返回值
:
c
第一次出现的位置的地址
如果
c
不存在则返回
NULL
char *strrchr(const char *s, int c);
strstr函数:查找指定字符串出现的位置
语法
char *strstr(const char *haystack, const char *needle);
参数
:
haystack:
被查找的字符串
needle:
要查找的字符串
返回值
:
查找到的字符串第一次出现的位置
如果不存在返回
NULL
atoX:转数字
int atoi(const char * p);
将字符串型的整数
,
转换为
int
double atof(const char * p);
将字符串型的浮点数
,
转换为
double
strtok:切割字符串
语法
char *strtok(char *str, const char *delim);
参数
:
str:
被切割的字符串
delim:
以什么切割
返回值
:
切割后的字符串
注意
每调用一次该函数
,
切割一次
切割上一次剩余的字符串时
str
填
NULL
示例1
void method07()
{
char str[] = "hehehe:::::::::hahaha#xixixi@lalala:heiheihei";
char tag[] = ":#@";
char *p = strtok(str,tag);
printf("str = %s\n",str);
printf("p = %s\n",p);
//
当被切割的字符串为
NULL,
将会切割上一次剩余的字符串
char *p2 = strtok(NULL,tag);
printf("p2 = %s\n",p2);
}
格式化字符串
sprintf
int sprintf(char *str, const char *format, ...);
作用:
给
str
指向的内存中写入指定内容
,format
格式化字符串
,...
替换占位符的值
sscanf
int sscanf(const char *str, const char *format, ...);
作用:
从
str
中按
format
获取数据到
...
中
注意
%d:只能取整数
%c:一次读取一个字符
%s:与空格,换行,\0读取结束
%2d:取两位整数,如果超过2位取两位,不足两位有几位取几位
%*d:跳过整数
%*2d:跳过两位整数
%[a-z] 表示匹配 a 到 z 中任意字符(尽可能多的提取,遇除a-z以外结束)
贪婪性:尽可能多的提取
%[aBc] 匹配 a、B、c 中一员,贪婪性
%[^aFc] 匹配非 a Fc 的任意字符,贪婪性,遇a,F,c结束
%[^a-z]表示读取除 a-z 以外的所有字符
示例
char buf[20];
sscanf("gl@1000phone.com","%*[^@]@%[^.]",buf);
printf("%s\n",buf);