【发布时间】:2009-11-12 17:59:40
【问题描述】:
我正在使用 C++ 编写两段大代码,一段以“C 风格”完成,另一段以“C++ 风格”完成。
C 类型代码具有返回 const char* 的函数,而 C++ 代码在很多地方都有类似
const char* somecstylefunction();
...
std::string imacppstring = somecstylefunction();
它从 C 样式代码返回的 const char* 构造字符串。
这一直有效,直到 C 样式代码更改并开始有时返回 NULL 指针。这当然会导致段错误。
周围有很多代码,所以我想以最简洁的方式解决这个问题。在这种情况下,预期的行为是 imacppstring 将是空字符串。有没有一个很好的、巧妙的解决方案?
更新
这些函数返回的 const char* 总是指向静态字符串的指针。它们主要用于传递有关函数中任何意外行为的信息性消息(最有可能用于记录日志)。决定让这些在“无报告”上返回 NULL 很好,因为这样您就可以将返回值用作条件,即
if (somecstylefunction()) do_something;
而在函数返回静态字符串“”之前;
这是否是一个好主意,我不会接触这段代码,而且这也不取决于我。
我想要避免的是跟踪每个字符串初始化以添加包装函数。
【问题讨论】:
-
我要提一下,正如您在评论中提到的那样,您是“维护者”,可能违反了一些非常重要的样式规则。我不知道您为什么要返回指向 char 的指针,除非它通过指针传递到函数中。你能详细说明一下吗?你可能有更大的问题。
-
谁能回答为什么 std::basic_string 实现不将 null value_type 指针视为空字符串?
-
@jmucchiello,我认为因为从根本上说,“空字符串”与指向内存地址 0 的指针非常不同。空字符串
""实际上占用内存作为单个空字符。 -
您是否尝试过与决定开始返回空指针的人交谈,并解释它破坏了 C++ 代码?
-
如果函数返回“”,应该仍然可以进行简单的检查:
if (*somecstylefunction())