我正在将程序从C移植到C++,包括以下代码:
char* get_file_extension(const char* file_name)
{
char* e = strrchr((char*) file_name, '.');
if (e == NULL)
{
char* buf = strdup(file_name);
return buf;
}
return e + 1;
}
Run Code Online (Sandbox Code Playgroud)
假设我只是将编译器更改为c ++ 11,在这种情况下将NULL更改为nullptr是否足够?目前strrchr来自包含头文件string.h,所以我担心如果strrchr返回NULL而不是nullptr并且if(e == nullptr)检查失败.
或者我应该将string.h更改为cstring?
strrchr返回NULL是一个不准确的声明.NULL是一个扩展为空指针常量的宏.空指针常量可以隐式转换为任何指针类型的空指针.什么strrchr返回的是一个空指针常数被转换为一个char*空指针.
nullptr也是一个空指针常量,带有一些特殊属性.但是他们中的大多数对我们来说并不重要.将它与任何类型的空指针进行比较时,如果指针是空指针,则比较将生成true.
事实上,即使nullptr == NULL是完美的,也会给你理智的结果.