我正在将程序从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,那么在本例中只将空更改为nullptr就足够了吗?当前strrchr来自包含的标头.h,因此我担心如果strrchr返回NULL而不是nullptr,以及如果(e == nullptr)检查失败。
还是应该将cstring.h更改为cstring
发布于 2018-02-21 07:44:23
strrchr返回NULL是一条不准确的语句。NULL是一个宏,它扩展为空指针常量。空指针常量可以隐式转换为任何指针类型的空指针。strrchr返回的是一个空指针常量,它被转换为char*空指针。
nullptr也是一个空指针常量,具有一些特殊的属性。但其中大部分对我们来说都是无关紧要的。当您将其与任何类型的空指针进行比较时,如果该指针是空指针,则该比较将得到真。
事实上,即使是nullptr == NULL也是非常好的,并且会给你一个正常的结果。
https://stackoverflow.com/questions/48900438
复制相似问题