调用空字符串的c_str

时间:2011-11-12 08:14:43

标签: c++

此代码片段是正常还是导致未定义的行为?

std::string s;
assert(strlen(s.c_str())==0);

如果它不是未定义的行为,上述断言是否会通过?

3 个答案:

答案 0 :(得分:9)

这是完全明确的定义,断言通过。 c_str()函数将始终返回有效的零终止C字符串。

通常会使用empty()来测试空字符串。

答案 1 :(得分:5)

是的,它会起作用(如果您将()附加到c_str以使其实际调用该函数)并且断言将通过。

答案 2 :(得分:1)

这是编译错误(如果启用了断言),因为const char *(std::string::*)()无法隐式转换为const char *

(舌头只在脸颊中间。)