C++ 指针可以用来遍历字符数组吗?

C++ 指针可以用来遍历字符数组吗?,c++,arrays,string,pointers,while-loop,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

我可以使用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++;
delete[]bufferpntr;
bufferpntr=nullptr;
缓冲区=空PTR;
缓冲区=新字符[MAX];
缓冲pntr=缓冲区;

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

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

是的,您可以这样做。在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++;
    }
}
#包括
#包括
#包括
#包括
int main()
{
std::字符串输入线;
std::getline(std::cin,inputLine);
const char*ptr=inputLine.c_str();
while(*ptr)
{

Std::C>

是的,你可以这样做。C++中的指针是双向迭代器,可以用来迭代一个有效的缓冲区。还有更多的习惯性方法来解决这个问题,消除了对字符串缓冲区内存管理的必要性。在你的情况下,你最好使用<代码> STD::String < /C>和< COD。e> 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++;
    }
}
#包括
#包括
#包括
#包括
int main()
{
std::字符串输入线;
std::getline(std::cin,inputLine);
const char*ptr=inputLine.c_str();
while(*ptr)
{

std::cout我在我的项目环境中找到了它。我决定将输入作为一个字符数组,结果是

我在我的项目环境中找到了它。我决定将输入作为一个字符数组,结果是

他们可以,但这看起来很容易出错。崩溃可能与确切的代码无关你选择向我们展示。MAX 1是偶然的吗?@LuchianGrigore:我不认为
MAX
存在
1
会导致崩溃,但这看起来很容易出错。崩溃可能与你选择向我们展示的确切代码无关。MAX 1是偶然的吗?@LuchianGrigore:我不认为
MAX
存在
1
w我相信它能工作,而且几代C程序员都使用
char*
数组编写了很好的软件。但是:它比
std::string
和/或
std::vector
更容易出错,因为你必须自己确保不会遇到缓冲区溢出——顺便说一句,这是最常见的错误之一软件漏洞的原因。在小测试程序中可能不重要,但是对于大型C++项目,你应该避免“裸露”。指针、
char*
和其他C风格的数组。我确信它是有效的,而且几代C程序员都使用
char*
数组编写了很好的软件。但是:它比
std::string
和/或
std::vector
更容易出错,因为你必须自己确保不会出现缓冲区溢出WS-BTW是软件漏洞最常见的原因之一。在小型测试程序中可能不重要,但是对于较大的C++项目,您应该避免使用“裸”指针,即代码> char */COD>和其他C样式数组。