我正在将程序从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;
}
假设我只是将编译器更改为c ++ 11,在这种情况下将 NULL 更改为 nullptr 是否足够?目前strrchr来自包含头 string.h ,所以我担心如果strrchr返回 NULL 而不是 nullptr 以及if(e == < strong> nullptr )检查失败。
或者我应该将 string.h 更改为 cstring ?
答案 0 :(得分:5)
strrchr
返回NULL
是一个不准确的陈述。 NULL
是一个扩展为空指针常量的宏。空指针常量可以隐式转换为任何指针类型的空指针。 strrchr
返回的是一个空指针常量,它被转换为char*
空指针。
nullptr
也是一个空指针常量,带有一些特殊属性。但是他们中的大多数对我们来说并不重要。当你将它与任何类型的空指针进行比较时,如果指针是空指针,则比较将产生true。
事实上,即使nullptr == NULL
完全没问题,也会给你理智的结果。