我可以使用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++;
然而,当我编译代码并运行它时,我在打印第一个索引后立即崩溃。
答案 0 :(得分:3)
是的,你可以这样做。在C ++中,指针是双向迭代器,可用于迭代有效缓冲区。还有更多惯用的方法来解决这个问题,消除了自己管理字符串缓冲区内存的必要性。在您的情况下,您最好使用std::string
和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++;
}
}
答案 1 :(得分:2)
我的猜测:删除语句导致崩溃但后来才变得明显。尝试没有删除并向我们展示一个崩溃的完整程序。
答案 2 :(得分:1)
我在项目的背景下弄清楚了。我决定把输入作为一个char数组,然后就算了