博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cstring头文件函数解析
阅读量:6358 次
发布时间:2019-06-23

本文共 5683 字,大约阅读时间需要 18 分钟。

原创作品,转载请注明来源: 

在使用由字符数组或指针组成的字符串的时候,要用到一些函数,这些函数通常包含在头文件ctring中,以下是这个头文件中的函数的解析。

一、拷贝相关函数:

memcpy:void* memcpy(void* destination,const void* source, size_t num)

从source指向的地址拷贝num bytes到destination指向的地址。不检查source中的空字符,总是拷贝num bytes,可能产生溢出,当destination和source的大小小于num时。

memmove:void* memmove(void* destination,const void* source, size_t num)

从source指向的地址拷贝num bytes到destination指向的地址。常用于同一字符串的改变。不检查source中的空字符,总是拷贝num bytes,可能产生溢出,当destination和source的大小小于num时。

char str[] = "memmove can be very useful......";memmove (str+20,str+15,11); puts(str);

输出为:memmove can be very very useful.

strcpy:char * strcpy ( char * destination, const char * source )

将source指向的字符串拷贝到destination指向的地方。会检查空字符,遇空字符停止(字符串结束标志)。可能存在溢出。

strncpychar * strncpy ( char * destination, const char * source, size_t num )

 

将source指向的字符串拷贝到destination指向的地方,最多拷贝num bytes,或者遇到空字符(字符串结束标志)停止。num可以防止溢出。

 

二、连接相关函数:

strcat:char * strcat ( char * destination, const char * source )

将source指向的字符串连接到destination指向的字符串的后面。可能存在溢出,当连接后的大小大于destination的大小。

 

char str[80]; strcpy (str,"these "); strcat (str,"strings "); strcat (str,"are "); strcat (str,"concatenated."); puts (str);

 

输出为:these strings are concatenated.

strncatchar * strncat ( char * destination, const char * source, size_t num )

将source指向的字符串连接到destination指向的字符串的后面。最多连接num bytes。

 

三、比较相关函数:

memcmp:int memcmp ( const void * ptr1, const void * ptr2, size_t num )

比较ptr1、ptr2指向的内存块的前面num bytes,如果都相同则返回0,如果第一个不同byte ptr1的小于ptr2的,返回负数,否则返回正数。如果前面都相同,即使中间遇到空字符,也会继续比较下去,直到比较完所有的num bytes。

char buffer1[] = "DWgaOtP12df0";char buffer2[] = "DWGAOTP12DF0"; int n;n=memcmp ( buffer1, buffer2, sizeof(buffer1) );if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);

输出为:'DWgaOtP12df0' is greater than 'DWGAOTP12DF0'.

strcmp:int strcmp ( const char * str1, const char * str2 );

比较str1、str2指向的字符串,直到遇到不相同的字符或者空字符结束。如果都相同则返回0,如果第一个不同byte ptr1的小于ptr2的,返回负数,否则返回正数。

strncmp:int strncmp ( const char * str1, const char * str2, size_t num )

比较ptr1、ptr2指向的字符串,直到遇到不相同的字符或者空字符结束或者比较完前面的num bytes结束。如果都相同则返回0,如果第一个不同byte ptr1的小于ptr2的,返回负数,否则返回正数。

 

strcollint strcoll ( const char * str1, const char * str2 )

 

比较str1、str2指向的字符串,直到遇到不相同的字符或者空字符结束。如果都相同则返回0,如果第一个不同byte ptr1的小于ptr2的,返回负数,否则返回正数。函数的行为决定于所选择的c语言环境中的LC_CALLATE类别(用的比较少)

strxfrmsize_t strxfrm ( char * destination, const char * source, size_t num )

 

传输source指向的字符串到当前环境,然后拷贝前面num bytes字符到destination指向的地方,返回传输的字符串的长度,不包含空字符。函数的行为决定于所选择的c语言环境中的LC_CALLATE类别(用的比较少)

 

四、检索相关函数:

memchr:const void * memchr ( const void * ptr, int value, size_t num );

               void * memchr ( void * ptr, int value, size_t num );

 

在ptr指向的内存中的前num bytes中搜索值value,返回第一个value的指针,如果没有找到返回空指针。

char * pch;char str[] = "Example string";pch = (char*) memchr (str, 'p', strlen(str));if (pch!=NULL)    printf ("'p' found at position %d.\n", pch-str+1);else    printf ("'p' not found.\n");

输出:'p' found at position 5.

strchr:const char * strchr ( const char * str, int character );

           char * strchr ( char * str, int character );

在ptr指向的字符串中搜索值value,返回第一个value的指针,如果没有找到返回空指针。

strcspn:size_t strcspn ( const char * str1, const char * str2 );

在str1指向的字符串中搜索str2指向的字符串中的任意一个字符,返回找到的第一个字符前面的字符数,如果没有找到返回str1指向的字符串的字符数。

char str[] = "fcba73";char keys[] = "1234567890";int i;i = strcspn (str,keys);printf ("The first number in str is at position %d.\n",i+1);

输出:The first number in str is at position 5

strpbrk:const char * strpbrk ( const char * str1, const char * str2 );

             char * strpbrk ( char * str1, const char * str2 );

在str1指向的字符串中搜索str2指向的字符串中的任意一个字符,返回找到的第一个字符的指针,如果没有找到返回空指针。

char str[] = "This is a sample string";  char key[] = "aeiou";  char * pch;  printf ("Vowels in '%s': ",str);  pch = strpbrk (str, key);  while (pch != NULL)  {    printf ("%c " , *pch);    pch = strpbrk (pch+1,key);  }

输出:Vowels in 'This is a sample string': i i a a e i

strrchr:const char * strrchr ( const char * str, int character );

            char * strrchr ( char * str, int character );

在ptr指向的字符串中搜索值character,返回最后一个character的指针,如果没有找到返回字符串结束处的指针。

strspn:size_t strspn ( const char * str1, const char * str2 );

在str1指向的字符串中搜索str2指向的字符串中的任意字符,返回找到的字符个数。不包含空字符。

char strtext[] = "129th";  char cset[] = "1234567890";  i = strspn (strtext,cset);  printf ("The initial number has %d digits.\n",i);

输出:The initial number has 3 digits.

strstr:const char * strstr ( const char * str1, const char * str2 );

          char * strstr ( char * str1, const char * str2 );

在str1指向的字符串中查找str2指向的字符串,返回找到的第一次出现位置的指针,若没找到,返回空指针。

strtok:char * strtok ( char * str, const char * delimiters );

将str指向的字符串进行划分,delimiters指向的字符串的任意字符都是一个分割点。第一次调用,起始位置为字符串的开始,后面的调用,用NULL指针来替代str,代表从上一次分割处开始。如果找到分割点,返回起始位置的指针,否则返回空指针。

char str[] ="- This, a sample string.";  char * pch;  printf ("Splitting string \"%s\" into tokens:\n",str);  pch = strtok (str," ,.-");  while (pch != NULL)  {    printf ("%s\n",pch);    pch = strtok (NULL, " ,.-");  }

输出:

Splitting string "- This, a sample string." into tokens:Thisasamplestring

五、其他函数

memset:void * memset ( void * ptr, int value, size_t num );

设置ptr指向的内存的前面num bytes的值为value

char str[] = "almost every programmer should know memset!";  memset (str,'-',6);  puts (str);

输出:------ every programmer should know memset!

strerror:char * strerror ( int errnum );

将参数设置为erro,将返回描述错误的字符串

FILE * pFile;  pFile = fopen ("unexist.ent","r");  if (pFile == NULL)  printf ("Error opening file unexist.ent: %s\n",strerror(errno));

输出:Error opening file unexist.ent: No such file or directory

strlen:size_t strlen ( const char * str );

返回str指向字符串的长度,不包含空字符

参考文献:http://www.cplusplus.com/reference/cstring/

转载于:https://www.cnblogs.com/shrimp-can/p/5643829.html

你可能感兴趣的文章
基于华为防火墙双机热备
查看>>
rsync 只拷贝 同步 指定的文件 filter规则
查看>>
浅谈grep和正则表达式的亲密接触
查看>>
zabbix监控nginx
查看>>
2015年天翊他爹有想法了
查看>>
java基础学习--排序算法
查看>>
我的友情链接
查看>>
阿狸fastjson
查看>>
VMware中使用NAT配置静态IP方式让CentOS6.x共享主机网络
查看>>
tp操作mongodb数据库之简易留言板
查看>>
python代码风格指南:pep8 中文翻译
查看>>
java中static方法加锁
查看>>
JQuery监听页面滚动总结
查看>>
我的友情链接
查看>>
Jquery日历控件代码
查看>>
Linux用户切换导致github push出现Permission denied (publickey)错误
查看>>
cacti备份与迁移
查看>>
调整XenServer Domain0使用的vCPU数量
查看>>
虚拟机假死解决方法
查看>>
信息防泄如城防,多重把守方可保安全
查看>>