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语音提供的标准库。
二、工作中遇到的字符串相关的问题
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语音提供的标准库。