返回一个空的C-String

时间:2013-10-19 03:15:33

标签: c++ return cstring c-strings

简单问题:

如何使用尽可能少的代码返回空C-String?

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

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

谢谢!

2 个答案:

答案 0 :(得分:8)

简答:

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_cast运算符抛弃const

更好的做法是为返回空,非const,C风格字符串的函数返回NULL(或nullptr),但仅当调用代码检查NULL指针时才会返回。

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

答案 1 :(得分:1)

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

请注意,此功能绝对是愚蠢的,无论您的实际问题是什么,这都不是正确的解决方案。但是,既然你拒绝阐述你的实际问题,那就去吧。