NULLPTR用于终止C风格的字符串
Is nullptr used to terminate C-style strings?
我对在中的示例中使用nullptr感到困惑 我知道,如果p未分配,count_x应该终止,并且当for循环达到p引用的c风格字符串的末端时,则应终止。 但是,当我构建一个主要函数以使用count_x()时,它似乎永远不会正确终止: 执行此打印会大量垃圾,然后以分段故障退出。如果我用 编辑:评论中有一个讨论,阐明了这种情况。我使用的是2013年9月的书的第一印刷品,上面的印刷错误。该书的第三张印刷品(评论中的链接)具有更正的示例,该示例使用 edit2:对不起,这显然已经在这里提出过:在" c 之旅"中的错误代码。或不合格的编译器?int count_x(char* p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-terminated array of char (or to nothing)
{
if (p==nullptr) return 0;
int count = 0;
for (; p!=nullptr; ++p)
if (*p==x) ++count;
return count;
}
// The definition of count_x() assumes that the char* is a C-style string,
// that is, that the pointer points to a zero-terminated array of char.
int main () {
char teststring[] = {'b', 'l', 'a', 'h', ' '};
cout << "teststring is: " << teststring << endl;
cout << "Number of b's is: " << count_x(teststring, 'b') << endl;
return 0;
}
for (; *p!=' '; ++p)
中的for (; p!=nullptr; ++p)
替换CC_1,则可以正确执行。我想这意味着字符串未正确终止。如果是这样,我如何终止C风格的字符串,以便在此处使用NULLPTR?for (; *p!=0; ++p)
而不是for (; p!=nullptr; ++p)
。该书的勘误表中还记录了此更正。谢谢!
no,空指针不用于终止字符串。使用NUL字符。它们是不同的事情,但是如果将它们分配给C中的整数,结果始终是相同的:零(0)。
在C中表示一个NUL字符为' '
,并占用一个char
存储。null指针在C为0中表示,并占用与void *
相同的存储空间。例如,在64位计算机上,void *
为8个字节,而' '
是一个字节。
即,nullptr与' '
不同。字符是null字符,称为nul,但不应该称为null字节或空字符。
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何用符合C++核心准则的代码替换C风格的字符串解析
- 如何按照 Google C++风格指南连接字符串文字?
- 将STD :: U8String复制到一个UTF8字符的C风格字符串中
- NULLPTR用于终止C风格的字符串
- 在班级中使用动态分配的C风格字符串,并带有复制和分配操作员,给出了意外的结果
- 使用PINVOKE编组LPWSTR的C风格数组,以托管字符串[]
- 无法将C风格的字符串推送到std::vector中
- 比较两个C风格字符串的正确函数是什么
- Perl风格的引号用于C++中的长字符串
- c++指针- C风格的字符串
- c++ - str(n)cmp(i)()用于c++风格的字符串
- 如何让c风格的字符串函数工作
- 对于c风格字符串,boost::spirit::qi和qi::alnum会导致模板编译错误
- 使用c风格数组作为STL字符串操作的后端
- c++中的C风格字符串和操作符重载
- 复制/连接动态分配的C风格字符串
- 基本的c风格字符串内存分配
- 如何判断c++模板类型是否为C风格字符串
- 为什么我不需要解引用一个char指针来输出c风格的字符串?