原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5643829.html

在使用由字符数组或指针组成的字符串的时候,要用到一些函数,这些函数通常包含在头文件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指向的地方。会检查空字符,遇空字符停止(字符串结束标志)。可能存在溢出。

strncpy:char * 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.

strncat:char * 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的,返回负数,否则返回正数。

strcoll:int strcoll ( const char * str1, const char * str2 )

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

strxfrm:size_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:
This
a
sample
string

五、其他函数

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/

cstring头文件函数解析的更多相关文章

  1. xe7 c++builder 日期时间头文件函数大全 date

    c++builde r时间日期函数大全,在头文件System.DateUtils.hpp,不过没有IncMonth,因为这个函数定义在System.SysUtils.hpp里头了,唉 date,dat ...

  2. linux c 获取头文件函数getenv

    #include <stdio.h>#include <stdlib.h> int main(){ printf("%s\n", getenv(" ...

  3. wordpress模板各文件函数解析

    修改主题时发现好多WordPress主题函数都不了解,因此网上摘抄了一份放在自己博客上,便于以后好找. 在WordPress中如何按你的意愿显示页面,关键看你是否了解WordPress主题模板页面.这 ...

  4. APP安全之代码混淆防止反编译查看真实的头文件函数声明

    现在有的公司对自己的爱屁屁(APP)安全上有重视,所以本篇讲一下代码混淆,即使别人反编译出来,也看不出来头文件的信息. 上菜: 1.首先安装class-dump,下载地址:http://steveny ...

  5. 头文件 string.h cstring string 区别

    1.#include <cstring>   //不可以定义string s:可以用到strcpy等函数using   namespace   std; #include <stri ...

  6. C++解析头文件-Qt自动生成信号声明

    目录 一.瞎白话 二.背景 三.思路分析 四.代码讲解 1.类图 2.内存结构声明 3.QtHeaderDescription 4.私有函数讲解 五.分析结果 六.下载 一.瞎白话 时间过的ZTMK, ...

  7. .h头文件、 .lib库文件、 .dll动态链接库文件之间的关系

    转自.h头文件. .lib库文件. .dll动态链接库文件之间的关系 h头文件作用:声明函数接口 dll动态链接库作用:含有函数的可执行代码 lib库有两种: (1)静态链接库(Static Liba ...

  8. .h头文件 .lib库文件 .dll动态库文件之间的关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  9. .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了 ...

随机推荐

  1. [html5] 学习笔记-html5音频视频

    HTML5 最大的新特色之一就是支持音频和视频.在 HTML5 之前,我们必须使用插件如 Silverlight  或 Flash 来实现这些功能.在 HTML5 中,可以直接使用新标签< au ...

  2. windows下搭建GO开发环境

    1. Go下载 由于某些原因golang.org不能访问,可以使用下面的镜像地址进行下 http://fossies.org/windows/misc/ 我的环境是win8 64位,所以选择go1.7 ...

  3. Unity预计算光照的学习(速度优化,LightProb,LPPV)

    1.前言 写这篇文章一方面是因为unity的微博最近出了关于预计算光照相关的翻译文章,另一方面一些美术朋友一直在抱怨烘培速度慢 所以抱着好奇的心态来学习一下unity5的PRGI预计算实时光照 2.基 ...

  4. ArcObjects与ArcEngine的联系与区别

    ArcObjects与ArcEngine的联系与区别 AO一般指的是桌面产品开发组件,需要在桌面环境中才能够使用,最典型的就是嵌入式VBA开发.但是这样带来的弊端和OFFICE等相关软件一样明显,就是 ...

  5. find查找命令

    find # 格式 find [路径] [参数] [表达式] -exec 指令 {} \ ; -{} 代表find找到的文件 -\ 禁止转意 : 表示本行指令结束 # find /sbin -type ...

  6. ReactNative入门(1)初识ReactJs

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  7. BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)

    一看就知道是模板题= = ,不说什么了= = PS:回去搞期末了,暑假再来刷题了 CODE: #include<cstdio> #include<iostream> #incl ...

  8. Humble Numbers(丑数) 超详解!

    给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑 ...

  9. JTextArea与TextArea自动换行和滚动条的区别对比

    最近在用Java写一个仿记事本的程序,但是发现用JTextArea写的效果有点差,但是用TextArea自动换行并不那么方便,经过对比和实践,我也发现自己对这两个标签认识存在不足,下面就来讨论一下他们 ...

  10. ASP.NET Core MVC之Serilog日志处理,你了解多少?

    前言 本节我们来看看ASP.NET Core MVC中比较常用的功能,对于导入和导出目前仍在探索中,项目需要自定义列合并,所以事先探索了如何在ASP.NET Core MVC进行导入.导出,更高级的内 ...