3

简单的问题:

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

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

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

谢谢!

4

2 回答 2

10

简短的回答:

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

或者

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

或者

char *get_string() { return NULL; }

或者

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


详细答案:

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

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

如果你真的必须返回一个指向字符串文字的非常量指针,你可以使用const_cast操作符来抛弃const.

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

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

于 2013-10-19T04:20:39.880 回答
2
char* foo()
{
    static char empty[1];
    return empty;
}

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

于 2013-10-19T04:11:28.043 回答