1

我可以使用 char* bufferpntr 遍历 char* 缓冲区指向的数组吗?

例子:

delete [] bufferpntr;
bufferpntr = nullptr;
buffer = nullptr;
buffer =  new char [MAX];
bufferpntr = buffer;

cout << "How many data entries:\t";
cin.getline(buffer, MAX, '\n');


 while (*bufferpntr != '\0')
     cout << setw(2) << bufferpntr++;

但是,当我编译代码并运行它时,我在打印第一个索引后立即崩溃。

4

3 回答 3

3

是的,你可以这样做。在 C++ 中,指针是双向迭代器,可用于迭代有效缓冲区。还有更惯用的方法来解决这个问题,从而消除了自己管理字符串缓冲区内存的必要性。在您的情况下,您最好使用std::stringand std::getline。通过这种方式,您可以读取输入行,而不管它的大小(当然只要它适合可用内存),而不必担心分配和释放资源。

以下示例符合您从std::cin字符串中读取一行并输出每个字符的要求。

#include <utility>
#include <string>
#include <iostream>
#include <iomanip>

int main()
{
    std::string inputLine;

    std::getline(std::cin, inputLine);
    const char *ptr = inputLine.c_str();
    while(*ptr)
    {
        std::cout << std::setw(2) << *ptr++;
    }
}
于 2013-06-12T23:24:44.050 回答
2

我的猜测:delete 语句会导致崩溃,但它只会在以后变得明显。尝试不删除,并向我们展示一个崩溃的完整程序。

于 2013-06-12T20:50:40.267 回答
1

我是在我的项目的背景下弄明白的。我决定将输入作为一个字符数组,它解决了

于 2013-06-14T05:25:19.433 回答