可以使用指针遍历字符数组吗?

时间:2013-06-12 20:00:33

标签: c++ arrays string pointers while-loop

我可以使用char * bufferpntr来遍历char * buffer指向的数组吗?

示例:

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++;

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

3 个答案:

答案 0 :(得分:3)

是的,你可以这样做。在C ++中,指针是双向迭代器,可用于迭代有效缓冲区。还有更多惯用的方法来解决这个问题,消除了自己管理字符串缓冲区内存的必要性。在您的情况下,您最好使用std::stringstd::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++;
    }
}

答案 1 :(得分:2)

我的猜测:删除语句导致崩溃但后来才变得明显。尝试没有删除并向我们展示一个崩溃的完整程序。

答案 2 :(得分:1)

我在项目的背景下弄清楚了。我决定把输入作为一个char数组,然后就算了