【发布时间】:2012-01-12 01:39:35
【问题描述】:
我已经盯着这个有一段时间了,我对我的 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 的边界
谁能帮我理解这里发生了什么?
顺便说一句,我很了解 C++ 中的字符串类,但是,对于这个作业(讲师希望我们使用指针以及 new 和 delete 运算符)。
【问题讨论】:
-
奇怪的代码,但一个措辞出色的问题,+1。
-
for循环中的测试表达式应该写成!iterator或者(更完整地)写成iterator != NULL。 ('\0'是一个 NUL 字节,而不是一个 NULL 指针,尽管“通常的转换”将允许它工作,无论它看起来多么奇怪)