返回一个空的 C 字符串

Return an empty C-String

本文关键字:字符串 一个 返回      更新时间:2023-10-16

简单的问题:

如何返回一个代码尽可能少的空 C 字符串?

我有需要返回空char*的代码。 我正在寻找类似return "";的东西. 我知道有几种方法可以做到这一点,但我正在寻找最有效的方法。

使用return "";可以warning: conversion from string literal to 'char *' is deprecated [-Wdeprecated-writable-strings]

谢谢!

简短回答:

const char *get_string() { return ""; }

char *get_string() { return const_cast<char *>(""); }

char *get_string() { return NULL; }

std::string get_string() { return std::string(); }


详细答案:

C 和 C++98/C++03 支持从字符串文字到 char * 的隐式转换,但显然在 C++11 中不支持。 弃用警告只是为了让您知道应该解决这个问题,特别是如果您希望能够迁移代码 C++11。

空字符串文字 (") 实际上并不为空,它是一个包含单个空字符 (\0) 的字符串。 当你使用 return ""; 时,你实际上是在返回一个指向 const 字符串文字的内存位置的指针,因此函数返回类型应该是const char *

如果确实必须返回指向字符串文本的非 const 指针,则可以使用 const_cast 运算符来丢弃const

更好的做法是为返回空的、非常量的、C 样式字符串的函数返回 NULL(或 nullptr),但前提是调用代码正在检查 NULL 指针。

请注意,C++有自己的字符串类型(std::string),更好的做法是尽可能使用它而不是C样式的字符串。

char* foo()
{
    static char empty[1];
    return empty;
}

请注意,这个函数绝对是愚蠢的,无论你的实际问题是什么,这都不太可能是正确的解决方案。 但是,既然你拒绝阐述你的实际问题,那就来吧。

相关文章: