2014-10-07 63 views
1

我正在通过Bjarne Stroustrup的阅读C++的一个示例,我很难理解一个早期的示例。在下面的代码中,while循环用于将指针递增到C样式字符串,直到它遇到空字符。我没有得到的是为什么指向一个空字符会导致指针采取nullptr的值。它似乎应该是一个非常好的指针,恰好指向一个空值。我会感到惊讶,如果它是一个作家错误,因为这本书包含在这里stackexchange的reccommendations:The Definitive C++ Book Guide and List通过指针递增来遍历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; 
} 
+4

它不会;该代码示例是错误的 – 2014-10-07 05:51:49

+1

本书中的示例不同。循环是'while(* p)'。你有哪个版本? – imreal 2014-10-07 05:56:01

+0

那么,我有一个版本,我发现通过谷歌搜索“* C++ * pdf游览”(第一个结果)。我猜对了,尽管有趣,但它声称会被复制到2014. – agd 2014-10-07 06:03:09

回答

4

要检查空字符,你应该测试*p != '\0',不p != nullptr

2

它由于你提到的原因而分段。尝试:

for (; *p; ++p)