1. strcpy
char *strcpy(char *destin, char *source);
功能:将 source 指向的字符串拷到 destin。
- int main()
- {
- char dest[5];
- char *src="123456";
- strcpy(dest, src);
- printf("dest= %s, %s, %s", dest, dest+4, dest+5);
- return 0;
- }
从结果可知确实将 src 的内容复制过去了,但是全部复制导致 dest 满了,使用不当就会出错!
2. strncpy
char *strncpy(char *destin, char *source, int len);
功能:将 source 指向的 len 个字符串拷到 destin。
- int main()
- {
- char dest[5];
- char *src="123456";
- strncpy(dest, src, 3);
- dest[3]= '\0';
- printf("dest= %s, %s, %s", dest, dest+4, dest+5);
- return 0;
- }
结果可知加上'\0'结束符后 dest 内容变的更安全,strcpy 和 strncpy 要额外加字符结束符!
3. strcat
char* strcat(char * str1,char * str2);
功能: 把字符串 str2 接到 str1 后面, str1 最后的'\0'被取消
- int main()
- {
- char dest[5]="abcd";
- char *src="123456";
- strcat(dest, src);
- printf("dest= %s", dest);
- return 0;
- }
4. strncat
char *strncat(char *dest, const char *src, size_t maxlen)
功能: 将字符串 src 中前 maxlen 个字符连接到 dest 中
- int main()
- {
- char dest[10]="abcd";
- char *src="123456";
- strncat(dest, src, 8);
- printf("dest= %s", dest);
- return 0;
- }
与 strncpy 不同,strncat 会自动在末尾加'\0',若指定长度超过源字符串长度,则只复制源字符串长度即停止,更安全!
5. strcmp
int strcmp(char * str1,char * str2);
功能: 比较两个字符串 str1,str2
返回: str1
- int main() {
- char dest[10] = "abcd";
- char * src = "a23456";
- char d2[8] = "abcd";
- int res;
- res = strcmp(dest, src);
- printf("res= %d \n", res);
- res = strcmp(dest, d2);
- printf("res= %d \n", res);
- return 0;
- }
结果可知每一位都要比较,且与原字符数组长度无关。
6. strncmp
int strncmp(char *str1,char *str2,int count)
功能: 对 str1 和 str2 中的前 count 个字符按字典顺序比较
返回: 小于 0:str1
- int main() {
- char dest[10] = "abcd";
- char * src = "a23456";
- char d2[8] = "abcd";
- int res;
- res = strncmp(dest, src, 1);
- printf("res= %d \n", res);
- res = strncmp(dest, d2, 1);
- printf("res= %d \n", res);
- return 0;
- }
7. strchr
char* strchr(char* str,char ch);
功能: 找出 str 指向的字符串中第一次出现字符 ch 的位置
返回: 返回指向该位置的指针, 如找不到, 则返回空指针
- int main()
- {
- char dest[10]="abcd";
- char* rp;
- char ch= 'c';
- rp=strchr(dest, ch);
- if(NULL == rp)
- printf("no %c exist", ch);
- else
- printf("pos of %c is %d", ch, (int)(rp-dest+1));
- return 0;
- }
8. strrchr
char *strrchr(const char *s, int c)
功能: 得到字符串 s 中最后一个含有 c 字符的位置指针
返回: 位置指针
- int main()
- {
- char dest[10]="abcdabc";
- char* rp;
- char ch= 'c';
- rp=strrchr(dest, ch);
- if(NULL == rp)
- printf("no %c exist", ch);
- else
- printf("pos of %c is %d", ch, (int)(rp-dest+1));
- return 0;
- }
strrchr 比 strchr 多的 r 意指反向寻找,位置都是从 1 开始计数(非从 0 开始)
9. strstr
char* strstr(char* str1,char* str2);
功能: 找出 str2 字符串在 str1 字符串中第一次出现的位置 (不包括 str2 的串结束符)
返回: 返回该位置的指针, 如找不到, 返回空指针
- int main()
- {
- char dest[10]="abcdabc";
- char* rp;
- char ch1[]= "c";
- char str2[]= "cda";
- rp=strstr(dest, ch1);
- if(NULL == rp)
- printf("no %s exist", ch1);
- else
- printf("substring is %s \n", rp);
- rp=strstr(dest, str2);
- if(NULL == rp)
- printf("no %s exist", str2);
- else
- printf("substring is %s ", rp);
- return 0;
- }
可以找单个字符串(字符不符合参数要求)
10. strnset
char *strnset(char *s, int ch, size_t n)
功能: 将字符串 s 中前 n 个字符设置为 ch 的值
返回: 指向 s 的指针
- int main()
- {
- char dest[10]="abcdabc";
- char* rp;
- char ch= 'F';
- rp=strnset(dest, ch, 4);
- printf("after strnset dest is %s \n", rp);
- return 0;
- }
11. strset
char *strset(char *s, int ch)
功能: 将字符串 s 中所有字符设置为 ch 的值
返回: 指向 s 的指针
- int main()
- {
- char dest[10]="abcdabc";
- char* rp;
- char ch= 'F';
- rp=strset(dest, ch);
- printf("after strnset dest is %s \n", rp);
- printf("after strnset dest is %s \n", dest);
- return 0;
- }
结果的 rp 和 dest 都被修改为同一内容!
12. strtok
char *strtok(char *s1, const char *s2)
功能: 分解 s1 字符串,用特定分隔符 (s2) 分隔成多个字符串
返回: 字符串 s1 中首次出现 s2 中的字符前的子字符串指针
strtok() 在参数 s1 的字符串中发现参数 s2 中包涵的分割字符时,则会将该字符改为 \ 0 字符。在第一次调用时,strtok() 必需给予参数 s1 字符串,往后的调用则将参数 s1 设置成 NULL。每次调用成功则返回指向被分割出片段的指针。
- int main()
- {
- char dest[]="ab,cd,ef,c";
- char* rp;
- char ch[]= ",";
- rp=strtok(dest, ch);
- while(NULL != rp)
- {
- printf("dest: %s ", dest);
- printf("rp: %s \n", rp);
- rp=strtok(NULL, ch);
- }
- return 0;
- }
说明:尽量使用可重入版的 strtok,Windows 平台下为 strtok_s,Linux 平台下为 strtok_r。
牢记 strtok 函数族的分隔规则:忽略字符串前后的分隔符,连续的分隔符被当做一个处理。
在使用 strtok 前,请对源字符串进行备份,除非你可以接受字符串被修改这一事实(修改为分隔的第一个字符串)。
13. strupr
char *strupr(char *s)
功能: 将字符串 s 中的字符变为大写
- int main()
- {
- char dest[]="ab,cd,EF,c";
- char* rp;
- rp=strupr(dest);
- printf("dest: %s, rp: %s", dest, rp);
- return 0;
- }
原字符串 dest 也被修改!!,对符号和大写字符无影响。
char *strlwr(char *s) 与它相反,将字符串中的字符变为小写字符
还有一些 memxxx() 函数下次单独说明,有问题欢迎评论~~
来源: http://www.bubuko.com/infodetail-2453232.html