汉扬编程 C语言入门 C语言常用字符串处理函数(一)

C语言常用字符串处理函数(一)

C语言常用字符串处理函数(一)

C语言常用字符串处理函数(一)

偏底层的工程项目中,我们经常会遇到要用C语言来直接处理字符串,了解这些函数,编写起代码来能够事半功倍,这也是字符串处理的基础。C语言直接操作内存,所以需要完全理解这些函数在做什么,并且时刻注意安全检查,才能尽量避免一些奇怪的错误(这也是使用C语言的缺点)。一般地,使用这些函数,需要包含头文件:

#include <string.h>1. strcpy

原型:char *strcpy (char * __dest, const char * __src); 功能:将一个字符串(__src)拷贝到另一个字符串缓冲区中(__dest),并返回拷贝后的字符串指针; 例子:

#include <stdio.h>#include <string.h>int main(){ const char* str1 = "abcdefg"; char str2[32]; strcpy(str2,str1); printf("after copy, str2 = %s\\n",str2); return 0;}运行结果:

after copy, str2 = abcdefg注意:

1. 必须保证拷贝后的缓冲区即上例中str2的大小足够,否则造成内存溢出到未分配的地址,容易产生各种未知错误;

2. 由于该函数原理是逐字节复制,所以如果str1和str2的空间有重叠,则会造成覆盖,可以看下面这个例子:

#include <stdio.h>#include <string.h>int main(){ char str1[32]="abcdefg"; strcpy(str1+3,str1); printf("after copy, str1 = %s\\n",str1); return 0;}拷贝后的空间和源字符串的空间是有重合的,则源字符串内容会被修改,运行结果为:

after copy, str1 = abcabcdefg2. strncpy

原型:char *strncpy (char * __dest, const char *__src, size_t __n);

功能:将一个字符串(__src)拷贝到另一个字符串缓冲区中(__dest),拷贝最多不超过__n字节,并返回拷贝后的字符串指针;

例子:

#include <stdio.h>#include <string.h>int main(){ const char* str1 = "allen junyu"; char str2[32]="anything you can write"; char* p=strncpy(str2,str1,7); printf("p=%s\\n",p); p[7]=0; printf("p=%s\\n",p); return 0;}运行结果:

p=allen jg you can writep=allen j注意: strncpy这个函数并不会自动的在字符串结尾加’\\0’,需要我们去增加。

3. strcat

原型:char *strcat (char *__dest, const char *__src);

功能:将一个字符串(__src)拼接到另一个字符串缓冲区中(__dest),并返回拼接后的字符串指针;

例子:

#include <stdio.h>#include <string.h>int main(){ char str1[32] = "allen"; const char* str2 = "junyu"; char* p=strcat(str1,str2); printf("p=%s\\n",p); return 0;}运行结果:

p=allenjunyu注意:同样地,需要保证str1有足够的存储空间,否则,程序会顺着内存地址往后写,破坏其他内存数据。

4. strncat

原型:char *strncat (char *__dest, const char *__src, size_t __n);

功能:将一个字符串(__src)拼接到另一个字符串缓冲区中(__dest),最多不超过__n个字节,并返回拼接后的字符串指针;

例子:

#include <stdio.h>#include <string.h>int main(){ char str1[32]="allen "; const char* str2="junyu"; strncat(str1,str2,3); printf("str1=%s,length=%d\\n",str1,strlen(str1)); strncat(str1,str2,1000000); printf("str1=%s,length=%d\\n",str1,strlen(str1)); return 0;}运行结果:

str1=allen jun,length=9str1=allen junjunyu,length=145. strlen

原型:size_t strlen (const char *__s);

功能:返回一个字符串(__src)的长度,即字节(符)数,这里仅考虑ASCII字符;

6. strcmp

原型: int strcmp (const char *__s1, const char *__s2);

功能:比较字符串__s1和字符串__s2,返回比较结果,如果相等,则返回0;

比较方式:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\\0’为止;

返回结果:当s1<s2时,返回值<0;当s1=s2时,返回值=0;当s1>s2时,返回值>0;

例子:

#include <stdio.h>#include <string.h>int main(){ const char* str1 = "allen junyu"; char str2[32]="allen junyu"; int ret = strcmp(str1,str2); printf("ret=%d\\n",ret); return 0;}运行结果:

ret=07. strncmp

原型: int strncmp (const char *__s1, const char *__s2, size_t __n);

功能:比较字符串__s1和字符串__s2的__n个字符,返回比较结果,如果相等,则返回0;

比较方式:同strcmp;

返回结果:同strcmp;

例子:

#include <stdio.h>#include <string.h>int main(){ const char* str1 = "allen junyu"; char str2[32]="allen bob"; int ret = strncmp(str1,str2,5); printf("ret=%d\\n",ret); return 0;}运行结果:

ret=08. strcasecmp

原型: int strcasecmp (const char *__s1, const char *__s2);

功能:比较字符串__s1和字符串__s2,忽略大小写的比较,返回比较结果,如果相等,则返回0;

例子:

#include <stdio.h>#include <string.h>int main(){ const char* str1 = "allen"; char str2[32]="AlleN"; int ret = strcasecmp(str1,str2); printf("strcasecmp ret=%d\\n",ret); return 0;}运行结果:

strcasecmp ret=09. strncasecmp

原型: int strncasecmp (const char *__s1, const char *__s2, size_t __n);

功能:比较字符串__s1和字符串__s2的__n个字符,忽略大小写的比较,返回比较结果,如果相等,则返回0;

例子:

#include <stdio.h>#include <string.h>int main(){ const char* str1 = "allen"; char str2[32]="AlleN junyu"; int ret = strncasecmp(str1,str2,5); printf("strncasecmp ret=%d\\n",ret); return 0;}运行结果:

strncasecmp ret=0最后,如果你想学C/C++可以私信小编“01”获取素材资料以及开发工具和听课权限哦!

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/6453.html

C\\C++语言23|字符串函数的自定义

「开源共享」拿来即用的C语言字符串函数库

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部