1. puts(),gets(),memset()
要注意,在Linux底下使用gets会有警告,gets不会去检查字符串的长度,如果字符串过长就会导致溢出。如果溢出的字符覆盖了其他一些重要数据就会导致不可预测的后果。
char ch[128]={'\0'}; 字符数组初始化
char *ch1;
ch1=(char *)malloc(128);
memset(ch1,'\0',128); 字符串初始化
gets(ch1); 字符串输入
puts(ch1); 字符串输出
2. strcpy——拷贝
先把dest中的内容清空,然后再拷贝进去
char *strcpy(char* dest,const char *src); 将src内容拷贝到dest中
char *ch; 必须分配空间并初始化,防止发生段错误
ch=(char *)malloc(128);
memset(ch,'\0',128);
char *ch1="c语言字符串";
strcpy(ch,ch1);
puts(ch);//c语言字符串
3. strncpy——拷贝
将想要拷贝的个数加到末尾
char *strncpy(char *dest,char *source,int maxlen);
char ch[128]={'\0'};
char *ch1="c语言字符串";
strncpy(ch,ch1,3);
puts(ch);//c语
4. strcat——拼接
拼接后返回指向前一个字符串的指针
//头文件#include<string.h>
char ch[128]="c语言";
char *ch1="-字符串";
strcat(ch,ch1);
puts(ch);//c语言-字符串
5. strcmp——比较
从左往右比较第一个不同的字符
int strcmp(const char *s1,const char *s2);
char *ch="12";
char *ch1="123";
char *ch2="12";
printf("ret=%d\n",strcmp(ch,ch1));//-1
printf("ret=%d\n",strcmp(ch,ch2));//0
printf("ret=%d\n",strcmp(ch1,ch));//1
6. strchr——检索字符
strchr函数功能为在一个串中查找给定字符的第一个匹配之处。 函数原型为:char *strchr (const char *str, int c),即在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
char *strchr(const char *str,char c)
char *ch="Hello World!";
char *ch2;
ch2=(char *)malloc(128);
memset(ch2,'\0',128);
ch2=strchr(ch,'W');
puts(ch2);//World!
7. strstr——检索字串
与strchr一样,只不过是检索字串,strstr (str1,str2) 函数用于判断字符串str2是否是str1的子串。 如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。 功能:strstr返回一个指针,指向string2在string1中首次出现的位置
char *strstr(const char *haystack, const char *needle);
char *ch="Hello World!";
char *ch2;
ch2=(char *)malloc(128);
memset(ch2,'\0',128);
ch2=strstr(ch,"Wor");
puts(ch2);//World!
8. strlwr——字符串全转为小写
strlwr函数的功能是将字符串中的S参数转换为小写形式。 说明:只转换s参数中出现的大写字母,不改变其它 字符 。 返回指向s参数的 指针 。
char *strlwr(char *str);
注:在windows操作系统中需定义成字符数组的形式,使用指针写会闪退:
char ch[]="HELLO WORLD!";
puts(strlwr(ch));//hello world!
注:在Linux中可使用指针:
char *ch="Hello World!";
puts(strlwr(ch));//hello world!
9. strupr——字符串全转为大写
strupr函数的功能是将字符串中的S参数转换为大写形式。 说明:只转换s参数中出现的小写字母,不改变其它 字符 。 返回指向s参数的指针 。
char *strupr(char *str);
注:在windows操作系统中需定义成字符数组的形式,使用指针写会闪退:
char ch[]="hello world!";
puts(strlwr(ch));//HELLO WORLD!
注:在Linux中可使用指针:
char *ch="Hello World!";
puts(strlwr(ch));//HELLO WORLD!
10. strtok——字符串的分割
char *strtok(char *strings,const char *tokseps);
例如:将字符串 “c语言,字符串,常用函数API” 以 ‘,’ 分割成 “c语言” , “字符串” 和 “常用函数API” 三个字符串;这个函数与strlwr,strupr一样,需要在这里使用字符串数组形式
char *p=NULL;
char ch[]="c语言,字符串,常用函数API";
p=strtok(ch,",");
puts(p); //c语言
p=strtok(NULL,",");
printf("p=%s\n",p); //p=字符串
p=strtok(NULL,",");
printf("p=%s\n",p); //p=常用函数API
p=strtok(NULL,",");
printf("p=%s\n",p); //p=(null)
可以观察到除了第一个字符串需要写入目标字符串外,其他都写NULL,且最后如果没有字符串了会返回null
所以我们可以改进它的写法
char *p=NULL;
char ch[]="c语言,字符串,常用函数API";
p=strtok(ch,",");
puts(p);
while(1){
p=strtok(NULL,",");
if(!p){
exit(-1);
}
puts(p);
}
同时,因为返回的是一个一个的指针,因此我们可以使用指针数组
char *p[3];
char ch[]="c语言,字符串,常用函数API";
p[0]=strtok(ch,",");
p[1]=strtok(NULL,",");
p[2]=strtok(NULL,",");
for(int i=0;i<3;i++){
printf("%s ",p[i]);
}