2013-06-12 80 views
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++; 

然而,当我编译代码并运行它,我印刷第一索引之后崩溃。

+0

他们*可以*,但是这看起来很容易出错。 – chris

+4

崩溃可能与您选择向我们显示的确切代码无关。 http://sscce.org –

+0

MAX 1有没有机会? –

回答

2

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

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

我明白了在我的项目中。我决定把这个输入作为一个字符数组,并且它的结果是

+1

我确定它可以工作,几代C程序员使用'char *'数组编写了好的软件。但是:它比std :: string和/或std :: vector更容易出错,因为你必须确保自己不会遇到缓冲区溢出 - 顺便说一句,最常见的原因之一针对软件漏洞。在一个小的测试程序中可能无关紧要,但对于较大的C++项目,您应该避免使用“裸”指针,char *和其他C风格的数组。 – Piotr99

相关问题