字符输入输出函数: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);