zoukankan      html  css  js  c++  java
  • c语言中的string

    1. strlen(char const* s);

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

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

      dest:目标指针;

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

      返回值: dest指针

      注意:1. 该函数会将包括''在内的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="1234";
    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[20];
    string s="1234";
    //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函数返回一个正值;

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

     

    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

  • 相关阅读:
    ガリレオの苦悩 攪乱す 1
    magento -- 添加中国省份列表
    magento使用google analytics
    Magento导出订单同时导出产品信息
    如何修改WAMP数据库上传文件的大小及上传时间限制
    magento插件手动下载
    Magento的价格去掉小数点
    magento首页调用最新产品
    url重写技术
    magento添加分类属性
  • 原文地址:https://www.cnblogs.com/myseasky/p/7458752.html
Copyright © 2011-2022 走看看