1,strtok函数的使用和模拟实现
char * strtok(char * str,const char * sep)(分隔字符串的作用)
会有static修饰变量,有记忆功能,会保存字符串的位置,下次找再继续找。
1)sep参数指向一个字符串,它包含了0个或者多个由sep字符中一个或则多个分隔符分割的标记。
2)第一个参数指定一个字符串,并将其用\0结尾,返回一个指向这个标记的指针。
3)strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
4)strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
5)如果字符串中不存在更多的标记,则返回NULL指针。
strtok函数和strcpy的使用
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[]="[email protected]";
char arr2[]={0};
strcpy(arr2,arr1);//将arr1拷贝到arr2里面
char *sep="@.";//设置分隔符
char *ret=NULL;//初始化
//for循环对字符串分隔
for(ret=strtok(arr2,sep);ret!=NULL;ret=strtok(NULL,sep))
{
printf("%s\n",ret);//换行打印出分隔开后的字符串
}
return 0;
}
2,strstr的使用和模拟实现
const char * strstr (const char * str1,const char * str2);
功能:在str1中找到了str2这个字符串,第一次出现的位置如果找不到了,就返回第一次出现的起始地址后面的字符也会接着运行出来,如果找不到,就返回NULL。
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[]="abcdefg";
char arr2[]="abc";//初始化
char *ret=strstr(arr1,arr2);//调用函数
if(ret==NULL)//进行判断
{
printf("不存在\n");
}
else
{
printf("%s\n",ret);//打印出第一个所在的起始位置
}
return 0;
}
strstr的模拟实现
#include<stdio.h>
#include<assert.h>
const char * my_strstr(const char* str1,const char* str2)
{
assert(str1&&str2);
const char* s1=NULL;
const char* s2=NULL;
const char* cur=str1;
if(*str2=='\0')
{
return str1;//如果str2是一个空字符串,返回str1
}
while(*cur!='\0')
{
s1=cur;
s2=str2;
while(*s1==*s2&&s1&&s2)
{
s1++;//判断的字符相同则s1,s2,都进行++
s2++;
}
if(*s2=='\0')//若是s2为\0则返回cur
{
return cur;
}
cur++;
}
}
int main()
{
char arr1[]="abcdefg";
char arr2[]="cde";//初始化
const char* ret=my_strstr(arr1,arr2);
if(ret==NULL)//进行判断
{
printf("不存在\n");
}
else
{
printf("%s\n",ret);//打印出第一个所出现的起始位置
}
return 0;
}
3,strerror的使用和模拟实现
sterror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
一般是放在errno.h这个头文件中说明的,c语言程序启动的时候就会使用一个全局变量error来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误,当我们使用标准库中的函数发生了某种错误,就将会对应的错误码,存放在erron中,strerror函数就可以将错误对应的错误信息字符串的地址返回。
#include<stdio.h>
#include<string.h>
int main()
{
int i=0;
for(i=0;i<10;i++)
{
pritnf("%s\n",strerror(i));
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
//打开文件
//用r方式打开,表示’读‘以读文件的形式
//打开文件,如果文件不存在,就打开失败
FILE*pf=fopen("data.txt","r");
if(pf==NULL)
{
printf("打开文件失败\n");
}
else
{
printf("打开文件成功\n");
fclose(pf);
pf=NULL;
}
return 0;
}
有一个与之相似用法的函数
4,perror
sterror--将错误码对应的错误信息的字符串的起始地址返回
perror--将erron中错误对用的错误信息打印出来
perror打印方式:
函数先打印str指向的字符串,打印:,在打印一个空格,在打印错误码的错误信息。
例如:
#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
//打开文件
//用r方式打开,表示’读‘以读文件的形式
//打开文件,如果文件不存在,就打开失败
FILE*pf=fopen("data.txt","r");
if(pf==NULL)
{
printf("打开文件失败,原因是:%s\n",strerror(erron));
perror("打开文件失败,原因是");
}
else
{
printf("打开文件成功\n");
fclose(pf);
pf=NULL;
}
return 0;
}
就自动补齐冒号和空格,还有错误的原因
//perror也相当于printf+sterror。