C 字符串学习总结

C 字符串总结
        一、背景
        在工作中,我们会经常会遇到字符串相关的问题。这里我就总结一下。
       
        二、工作中遇到的字符串相关的问题         
       
1) const char * p 与 char * const p 的区别
               Bjarne在他的The C++ Programming Language里面给出过一个助记的方法
               char * const p; ( * 读成 pointer to )
               p is a const pointer to char

              const char *p (* 读成 pointer to )
              p is a pointer to const char

              由于C++中没有const运算符,因此const char *p 等同于 char  const * p。

        2)const char * p 详解
             const char *p;p是一个指向const对象的指针。意思就是不能通过指针修改它所指的对象。但是,不能保证指向const的指针所指对象的值一定不可修改。
             例如:
            int val1 = 1;      //定义一个非const 变量
            const int * p;       //定义一个const int * p指针;该指针可以指向任意的int 对象。但是不可以通过指针修改指针所指向的对象。
            p = &val1;
             *p =2;       //error :*p might be const .不可以通过指针修改
             val1 = 5;        //ok
            printf("%d ",*p) ;// 打印结果为5,val1 值可修改。
            总结:不能使用指向const对象的指针修改基础对象,然而如果该指针指向的是一个非const对象,可以使用其他方法修改其所指对象。

        3)char * const  p 详解
           char * const  p;定义一个const 指针,指针本身不可修改。
             例如:
            int val1 = 1;
            int  * const  p;   //定义了一个const 指针p,定义后不可修改。正常情况下,需要在定义变量的时候初始化。
            p = &val1;      //error p is const
            int  * const  p2 = &val1;  //ok
            总结:指针本身是const的


        4) C 风格字符串
           C风格字符串就是以空字符null结束的字符数组。
          1)C风格字符串的使用
           字符串字面值的类型就是const char类型的数组。
           const char * cp = “some value”;
           while(*cp){
           ++cp;
           }
           //如果cp所指向的字符数组没有null结束符,循环会从cp指向的位置开始读数,直到遇到内存中某处的null结束符为止。

           2)使用C风格字符串需要注意的问题
           由于处理C风格字符串的库函数不会检查其字符串参数。所以需注意以下事项:
           注意一:永远不要忘记字符串结束符。
           注意二:调用者必须确保目标字符串具有足够的大小。
           注意三:尽量使用以strn开头的库函数。 例如:strncpy、strncat。

           3)处理C风格字符串的头文件
           #include <cstring>  cstring是string.h头文件的C++版本,而string.h则是C语音提供的标准库。

       
      



      




        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值