1. strlen(char const* s);

  函数传入的是c风格字符串(即以‘\0’结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'。

2. strcpy(char* dest, char const* source);

  dest:目标指针;

  source:是源指针,传入的必须是c风格字符串或者字符数组。

  返回值: dest指针

  注意:1. 该函数会将包括'\0'在内的source全部拷贝到dest。如果char* source="abcd"; dest为char[],则dest应该定义为char[5];

      2. src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

      3. C语言中不支持用赋值符号“=”直接将一个字符数组赋值给另一个字符数组。因为C语言不支持运算符重载。故而必须用strcpy操作。

3. strncpy(char* dest, char const* source, size_t n);

  n代表可以指定字符个数进行赋值。

  功能:将字符串source中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。要求:如果n > dest串长度,dest栈空间溢出产生崩溃异常。该函数注意的地方和strcpy类似,但是n值需特别注意。

  1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)

  如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。一般建议采取memset将dest的全部元素用null填充,如:memset(dest,0,8)(8为从dest起始地址开始前8个位置填充null,dest可以为字符指针和数组名)。

  注意:char* p="abc"; char ch[5]; sizeof(p)为4(包含null)(有些编译器不行),sizeof(ch)为5。

  这样:
  如果n = source串长度,与strcpy一致。 
  如果n = dest串长度,[0,src串长度]处存放于dest字串,(src串长度, dest串长度]处存放NULL。

  2)source串长度>dest串长度 
  如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑source串复制完整性,可以将dest最后一字符置为NULL。
  所以,一般把n设为dest(含null)的长度(除非将多个source复制到dest中)。当n=dest串长度时,定义dest为字符数组,因为这时没有null字符拷贝。

4. const char *c_str();

  c_str()函数是c++中属于string类的成员函数,返回一个指向正规C字符串的指针常量, 内容与本string串相同.(其实它指向的是string对象内部真正的char缓冲区),所以返回const,以防止用户的修改。

  注意:(如下这段内容参考 http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html)

  1)c_str()生成一个const char*指针,指向以空字符终止的数组,但这个数组的数据是临时的(如前所述,其实它指向的是string对象内部真正的char缓冲区),当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。看下例:

const char* c;
string s="";
c = s.c_str();
cout<<c<<endl; //输出:1234
s="abcd";
cout<<c<<endl; //输出:abcd

  

  上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd。因此应该把原string的数据复制到用户自己可以管理的内存中。怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。

//const char* c; //①
//char* c; //②
//char c[20];
char* c=new char[];
string s="";
//c = s.c_str();
strcpy(c,s.c_str());
cout<<c<<endl; //输出:1234
s="abcd";
cout<<c<<endl; //输出:1234

  

  注意:不能再像①一样将c声明为const char*类型的指针了,因为c要接收strcpy的值;也不能②所示,使用了未初始化的局部变量“c”,运行会出错的 。

  2)c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。

  3) data():与c_str()类似,但是返回的数组不以空字符终止。

 5. int strcmp ( const char * str1, const char * str2 );

  比较两个字符串数组的大小。规则如下:

  ①字符串1小于字符串2,strcmp函数返回一个负值;

  ②字符串1等于字符串2,strcmp函数返回零;

  ③字符串1大于字符串2,strcmp函数返回一个正值;

  实际比较时,按字符位置从小到大依次比较各个字符;直到第一对不相等的字符,或者任何一个字符数组遇到'\0'。注意:

 

if("ABC">"DEF")   /*错误的字符串比较*/

if(strcmp("ABC","DEF")   /*正确的字符串比较*/

6.  char *strcat(char *dest,char *src);

  strcat用于连接字符串,返回结果的头指针。

  参考如下两篇文章:

  http://www.cnblogs.com/clover-toeic/p/3885181.html

  http://blog.csdn.net/smf0504/article/details/52055971

c语言中的string的更多相关文章

  1. Go语言中的string知识点

    1.Go语言String的本质就是一个[]byte,所以他们之间可以互相转换,byte数组的长度就是字符串的长度. func StringTest1() { str := "Hello,Wo ...

  2. C语言中的string.h中的内存字符串处理函数

    转载请注明出处:http://blog.csdn.net/zhubin215130/article/details/8993403 void *memcpy(void *dest, const voi ...

  3. C语言中string char int类型转换

    C语言中string -- ::) 转载 ▼ 标签: 操作符 int char c语言 类型转换 分类: C/Cpp ,char型数字转换为int型 "; printf(]-');//输出结 ...

  4. c语言中的scanf在java中应该怎么表达,Scanner类。

    1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...

  5. c语言中time相关函数

    工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...

  6. C语言中system()函数的用法总结(转)

    system()函数功能强大,很多人用却对它的原理知之甚少先看linux版system函数的源码: #include <sys/types.h> #include <sys/wait ...

  7. Java 语言中 Enum 类型的使用介绍

    Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...

  8. C语言中static关键字的作用

    static的作用(精辟分析) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加sta ...

  9. C语言中static作用

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...

随机推荐

  1. VS c++ opencv画图

    任务:用c++在图片上画线 之前用过python的opencv,所以直接想到了用c++的opencv来画线. 但关键就是VS中如何配置c++ opencv库的问题: vs中opencv库的配置:htt ...

  2. js身份证号有效性验证

    1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用户名和身份证号就可以实名 ...

  3. 前端基础-css(2)

    一.标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web网页的制作,是个“流”,从上而下,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画. 标准文档流下,有一些现象,比 ...

  4. 关于mysql主从复制的概述与分类

    一.概述: 按照MySQL的同步复制特点,大体上可以分为三种类别: 1.异步复制: 2.半同步复制: 3.完全同步的复制: -------------------------------------- ...

  5. [StringUtil ] isEmpty VS isBlank

    昨天才意识到这两个的存在. Blank(空字符串 blank) StringUtils.isNoneBlank(null) = false StringUtils.isNoneBlank(null, ...

  6. AngularJS 笔记之创建服务方式比较 : factory vs service vs provider 。

    首先说一下服务这个东西是用来干嘛的.很多时候我们把太多的数据和逻辑都一股脑儿地往 controller 里放.这样我们的 controller 原来越臃肿.从它们的生命周期可以发现,其实 contro ...

  7. day3-python的函数及参数

    函数式编程最重要的是增强代码的重用性和可读性 1 2 3 4 def 函数名(参数):     ...     函数体     ... 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函 ...

  8. OpenCL 学习step by step (5) 使用二维NDRange workgroup

    http://www.cnblogs.com/mikewolf2002/archive/2012/09/07/2675634.html 在本教程中,我们使用二维NDRange来设置workgroup, ...

  9. SVN使用—高级用法

    一.SVN分支 Branch 选项会给开发者创建出另外一条线路.当有人希望开发进程分开成两条不同的线路时,这个选项会非常有用. 情景: 比如项目 demo 下有两个小组,svn 下有一个 trunk ...

  10. MySQL-5.7设置InnoDB表数据文件存储位置

    1.表空间 Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间. 共享表空间以及独立表空间都是针对数据的存储方式而言的. 共享表空间: ...