strrchr返回nullptr而不是c 中的null

does strrchr return nullptr instead of NULL in C++?

本文关键字:中的 null 返回 nullptr strrchr      更新时间:2023-10-16

我正在将程序从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 更改为 null nullptr 在这种情况下是否足够?当前STRRCHR来自包含的标题 String.h ,因此恐怕如果strrchr返回 null 而不是 nullptr and,则strong> nullptr (检查失败。

或我应该更改 String.h cstring

strrchr返回 NULL是不准确的语句。NULL是一个宏,可扩展为空指针常数。空指针常数隐式转换为任何指针类型的空指针。strrchr返回的是一个空指针常数,该常数转换为 char* null指针。

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

事实上,即使是nullptr == NULL也很好,也会给您带来理智的结果。