string和char*

判断char* 是否为NULL

1
2
3
4
char* foo;
foo=NULL;
if(foo)
printf("foo: %s",foo); // 先判断是否为NULL

比较典型的一个应用是获取环境变量时,如果没有设置环境变量,直接使用变量会报错,所以要判断是否为空:

1
2
3
char* path = getenv("CONFIG");
if(path)
cout<< string(path)<<endl;

使用getenv,不需要delete path释放内存

与字符串比较

C++11 does not allow conversion from string literal to char* 所以最好不要把字符串直接赋值给 char*

1
2
3
const char* path = "abcdef";	// 常用
std::string ss = "abcdef"; // 常用,因为源码的 operator= 定义如此
char* s = "abcdef"; // 避免这样使用

const char*与字符串比较,可以用函数strcmp,若相等则返回0

1
2
if( 0==strcmp(path, "abcdef") )
cout<<"yes"<<endl;

或者先转换成string,再进行比较:

1
2
if(string(path) == ss)
cout<<"yes"<<endl;