C语言学习:常见的字符串函数

时间:2021-05-03 01:43:03
字符输入输出函数:getchar,putchar
字符串输入输出函数:gets,puts
计算字符串长度函数:strlen
字符串连接函数:strcat、strncat
字符串拷贝函数:strcpy、strncpy
字符串比较函数:strcmp、strncmp
字符串大小转换函数:strlwr,strupr
查看子串在原串中的位置:strstr


mem系列(对内存进行操作):memset
                                           memcpy
            memcmp
            memmove

strlen    
char c[]="hello";
printf("%d",strlen(c));      

char *s="abcdefg";
printf("%d\n",strlen(s));   //输出结果:7   。注意 返回的长度不包括'\0'

strcpy                     //拷贝的时候会把‘\0’一起拷贝过去
char c[]="hello abc";             //内存:68 65 6c 6c 6f 20 61 62 63 00
char d[]="word";                   //内存:77 6f 72 64 00

strcpy(c,d);       //把d拷给c     等价于:strcpy(c,"word");
puts(c);            //结果:word 。内存:77 6f 72 64 00 20 61 62 63 00 。所以会打印出word。

strncpy:  
char a[10];
char b[20]="how are you";
strncpy(a,b,3);     //把b的前3个字符拷贝到a中。
puts(a);               //输出:how烫烫烫烫    。原因是:定义a[10]时,内存中是cc cc cc cc ... ,把b的三个字节拷给a之后,a为howccc,打印的
                            时候遇到'\0'才会停止。'\0'在内存中存储的是字节0。

char a[10]={0};
char b[20]="how are you";
strncpy(a,b,3);
puts(a);             //输出:how 。因为a初始化的时候全部赋为了0.拷贝之后a的内存为:how000000。打印的时候遇到字节0,即'\0'时停止

char a[10]={'a','b'};
char b[20]="how are you";
strncpy(a,b,3);
puts(a);              //输出:how 。因为a初始化的时候后面的全部赋了0.

char a[]="howoldareyou";
char b[]="abcd";
strncpy(a,b,3);
puts(a);              //输出:abcoldareyou        

strcmp   
char a="abcd";
char b="abaefgg";
int ret;
ret=strcmp(a,b); //结果:ret>0.     分析:比较字符串a,b的大小,就是从第一个字符开始比较ASCII码的大小。
                        //当a>b时,返回值>0。当a<b时,返回值<0。当a==b时,返回0.

strncmp 


strncat   
char a="liu";
char b="pengcheng";
strcat(a,b);      
puts(a);           //结果:liupengcheng    就是把b接到a上。


memset();  //内存设置,可以将从哪个地方开始的多少个内存清空。
char c[10]="hello";
memset(c,0,sizeof(c));    //把c的内存设为0.

memcpy();  //将一段内存拷贝到另一段内存。
比如结构体拷贝。


memcmp();
还要注意大小端的问题。

memmove();
自己往自己身上拷的时候,要用memmove。两个拷的话还是使用memcpy();效率高。但是自己往自己身上拷,不能用memcpy();,会自己踩自己的脚,然后错误。


strstr();函数
查看子串在原串中的位置

char *p1="helloworld";
char *p=strstr(p1,"world");
printf("%s",p1);