学习目标:
字符串的 常用API ,使用方法
学习内容:几种常用的函数调用接口(API)
1.和整型数一样
字符串就是字符数组,定义的几种格式2.和整形数组像
3.一般用char *p = "Hello"
char* pst="Hello World";
printf("%s",pst);
sizeof和strlen的区别:sizeof计算整型数,因 字符串数组有隐藏'\0',需用strlen机选帧数有效数据据大小。
char*a[3]="abc";
printf("a数组大小:%d",sizeof(a));//输出为4,包含'\0'
peintf("a数组大小:%s",strlen(a));//输出为3,strlen遇'\0'自动终止。计算的是有效数字。
a.puts()
1、输出字符串:b.printf("%d",p)
2、获取字符串:a.gets 需要检测内存是否合法(否则容易造成段错误)
b.scanf("%s",p)
char *patr;//野指针,没有指向,需要申请malloc型空间,接纳。
patr = (char*)malloc(128);
printf("请输入字符串:\n");
scanf("%s",pstr);//puts(pstr);
3、计算长度:strlen
4、初始化:memset //(初始化对象;初始化为什么字符;多大)
5、拷贝:a.strcpy; (A,B)讲B拷贝入A;B可以是字符串“Hello”,也可以是数组
char D[128]={'\0'};
char *strSrc = "拷贝1";
char ret= strcpy(D,strSrc); (A,B)讲后拷贝前
printf("拷贝结果:%s",ret);
b.strncpy;语法:char *strncpy(char *destinin, char *source, int maxlen);
char A[128]={'\0'};
memset(A,'\0',sizeof(A)/sizeof(A[0]));//初始化
strncpy(A,"Hello",3);//将字符串前三位拷贝入字符数组A
上面A是数组可以直接用sizeof计算数组大小//指针型直接写128或者strlen计算。(细节)
6、拼接:strcat :strcat(A,B);直接输出就行.
7、比较:strcmp: strcmp(A,B);A与B做差比较。
char *A="abc";
char *B="abcd";
int ret = strcmp(A,B);//
printf("AB比较结果:%d",ret);//输出为-1.
if(!strcmp(A,B)==0){printf("两字符一样长\n");}//!为取反,即直接输出比较结果。非0变0,0变非0.
8、查找子字符:strchr:
char *a="zhaoyi";
char b='y';
char *c=NULL;
U = strchr(a,b);//前面为查找的字符串,后为查找的字符,也可以直接'i'.
puts(U);//输出结果为:yi,查找字符并后面字符
函数原型
char *strchr(const char *str, int c)
参数
-
str-- 要被检索的 C 字符串。
-
c-- 在 str 中要搜索的字符。
功能
在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
返回值 :类型为指针
返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。
头文件
#include <string.h>
9、查找子串:strstr:功能:检索子串在字符串中首次出现的位置
char *strstr(char *str,char* substr);
str参数为 要检索的字符串
sunstr为要检索的字串
返回字符串(返回值类型为char *)中第一次出现字串的substr地址;如果没有检测到字串,返回NULL.
strchr找字符的如'i';strstr找字符串,如‘yi'
10、转为小写的函数:strlwr:功能如名,用法:put(strlwr(A));全部转化为小写
11、转为大写的函数:strupr:功能如名,用法:put(strupr(A));全部转化为大写
12、字符串分割:strtok:字符串的分割,根据标志分割,例如Zhao,Yi,Yi 标志,
strock(需要分割的字符串,分割标志)
char A[] = "Zhao,Yi,Yi";
char *Back;
Back = (char*)malloc(128);
Back = strtok(A,",");
int i = 0;
if(Back!=NULL){
printf("第%d次输出的字符串为:%s\n",i+1,Back);
}
while(1){
i++;
Back = strtok(NULL,",");
if(Back != NULL){
printf("第%d次输出的字符串为:%s\n",i,Back);
}else{
printf("输出字符串完毕\n");
break;
}
}
补充知识,野指针:
A.野指针造成非法内存空间访问,段错误,cmd窗口闪退
B.一旦用malloc,就要注意内存泄漏问题,并且对malloc返回值做判断,是否申请空间失败。(在linux中程序结束后,系统会自动回收malloc这个空间,否则要释放free(p);p=NULL)
char *p;//定义一个指针变量,需要将其'去野化',防止造成非法内存空间,出现段错误,cmd窗口闪退
p = (char*)malloc(128);
if(p=NULL){
printf("申请空间失败\n");
exit(-1);
}else{
操作函数
}
//释放指针地址
free(p);
p=NULL;