lee*_*y00 -1 c++ string-literals null-pointer
我得到了这些结果。我究竟做错了什么?
const char *c = "\0";
cout << (c == NULL); // false
cout << (c == nullptr); //false
Run Code Online (Sandbox Code Playgroud)
C++ 中的所有文字字符串实际上都是字符常量数组,包括空终止符。
这样做例如
const char* c = "\0";
Run Code Online (Sandbox Code Playgroud)
有点相当于
char const internal_string_array[] = { '\0', '\0' };
const char* c = &internal_string_array[0];
Run Code Online (Sandbox Code Playgroud)
因此,指向文字字符串的指针永远不会是空指针。
空指针和字符串空终止符之间也有区别。空指针是一个已被初始化为指向任何地方的指针。字符串空终止符是字符'\0'。这两个是不同的事情。
如果你想检查 C 风格的字符串(使用指针或数组)是否为空,那么你首先需要确保它不是空指针(如果你使用指针),然后检查是否第一个字符是字符串空终止符:
if (c == nullptr)
{
// No string at all!
}
else if (c[0] == '\0')
{
// String exists, but is empty
}
else
{
// String exists, and is not empty
}
Run Code Online (Sandbox Code Playgroud)
对于std::string对象(您应该将其用于几乎所有字符串),则不需要空指针检查:
if (str.empty())
{
// String is empty
}
else
{
// String is not empty
}
Run Code Online (Sandbox Code Playgroud)
另请注意,即使字符串不为空,它也可能包含不可打印的字符(如 ASCII 控制字符)或“不可见”字符(如空格或制表符)。因此,如果打印非空字符串,它可能不会显示任何内容。
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |