为什么指向通过值传递的char的指针找不到空终止符?

时间:2011-12-03 07:21:59

标签: c++ pointers char cstring

我一直在盯着这一段时间而且我对我for循环的情况感到困惑。

首先,我让用户输入一个使用cin.getline()

读取的短语
const int  STRING_MAX  = 1001;
char*      inputString = nullptr;

inputString = new char[STRING_MAX];
cin.getline(inputString, STRING_MAX, '\n');

如果有人想知道..我没有填满缓冲区(无论如何都不重要)。我只输入了大约25个字符。

下一个inputString按值传递给Palindrome class成员函数

word(char* source)

这就是我目前正在尝试的功能:

bool Palindrome::word(char* source) {
  for (char* iterator = source; iterator != '\0'; iterator++)
    cout << *iterator << endl;
}

我实际上做得更多,但此刻,我将代码缩减为您在上面看到的内容,由于某种原因,我不明白,循环超出了char* array <的范围/ p>

有人可以帮我理解这里发生的事情吗?

顺便说一句,我很清楚C ++中的字符串类,但是,对于这个赋值(教师希望我们使用指针以及new和delete操作符)。

1 个答案:

答案 0 :(得分:3)

iterator != '\0'这会测试iterator是否为空指针。情况永远不会如此,这不是你真正想要的。

您的代码不正确,但恰好是有效的代码,因为'\0'是整数值零的词法表示,因此它恰好是一个空指针常量。 / p>

要测试iterator是否指向空终止符,您需要使用*iterator != '\0'(或只测试*iterator,因为整数值为0的计算结果为false。)