1、strlen -- 统计字符串的长度,不包含结尾的'\0' --例如strlen("hello") 得到5
源码:
//strlen()
#include <stdio.h>
#include <string.h>
int mylen(const char *s);
int main(){
char a[]="hello";
char b[]="world";
printf("%d\n",strlen(b));
printf("%d\n",mylen(a));
return 0;
}
int mylen(const char *s){
int idx=0;
while(s[idx]!='\0')
idx++;
return idx;
}
2、strcmp--比较两个字符串,实际上就是按位比较指针所在位置的值,不相等则相减,返回得到的值,等于0表示两个字符串相同
源码:
//strcmp()
#include <stdio.h>
#include <string.h>
int mycmp(const char *s1,const char *s2);
int main(){
const char *a="hello,world";
const char *b="hello world";
printf("%d\n",strcmp(a,b));
printf("%d\n",mycmp(a,b));
printf("','(%d)-' '(%d)=%d\n",',',' ',','-' ');
return 0;
}
int mycmp(const char* s1,const char *s2){
while(*s1==*s2 && *s1!=0){
s1++;
s2++;
}
return *s1-*s2;
}
/*[root@db01 string]# ./strcmp
12
12
','(44)-' '(32)=12
*/
比如我比较了"hello,world"与"hello world"得到了逗号减去空格的值:12
3、strcpy--字符串拷贝,把char *src-->char *dst 是直接覆盖吗?请大佬解释一下~ 后面直接给了*dst==0,代表吧把原先的字符串切割了,如果不给,尝试一下
源码:
//strcpy()
#include <stdio.h>
#include <string.h>
char *mycpy(char *dst,const char *src);
int main(){
const char *a="hello";
char b[]="world,world";
//strcpy(b,a);
//printf("%s\n",b);
mycpy(b,a);
printf("%s\n",b);
// printf("%d\n",*strcpy(b,a));
return 0;
}
char *mycpy(char *dst,const char *src){
while(*src!=0){
*dst=*src;
src++;
dst++;
}
//上面while等价于==>while(*dts++=*src++);
*dst=='\0';
return dst;
}
4、strcat -- 字符串连接函数,直接使用man手册里的原型
源码:
//strcat()
#include <stdio.h>
#include <string.h>
char* strncat(char* dst,const char* src,size_t n);
int main(){
char a[]="world";
char b[]="hello,";
strncat(b,a,5);
printf("%s\n",b);
}
char*
strncat(char *dest, const char *src, size_t n)
{
size_t dest_len = strlen(dest);
size_t i;
for (i = 0 ; i < n && src[i] != '\0' ; i++)
dest[dest_len + i] = src[i];
dest[dest_len + i] = '\0';
return dest;
}