调用空字符串的c_str

pic*_*c11 8 c++

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

std::string s;
assert(strlen(s.c_str())==0);
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 10

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

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


Mar*_*tos 5

是的,它会工作(如果你追加()c_str使其实际调用该函数),并断言会通过.