strrchr在C ++中返回nullptr而不是NULL吗?

时间:2018-02-21 07:39:02

标签: c++ c

我正在将程序从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

1 个答案:

答案 0 :(得分:5)

strrchr返回NULL是一个不准确的陈述。 NULL是一个扩展为空指针常量的宏。空指针常量可以隐式转换为任何指针类型的空指针。 strrchr返回的是一个空指针常量,它被转换为char*空指针。

nullptr也是一个空指针常量,带有一些特殊属性。但是他们中的大多数对我们来说并不重要。当你将它与任何类型的空指针进行比较时,如果指针是空指针,则比较将产生true。

事实上,即使nullptr == NULL完全没问题,也会给你理智的结果。