C++ 不使用字符串读取无限长的输入行

C++ 不使用字符串读取无限长的输入行,c++,char,C++,Char,我想从输入中读取无限长的文本行。我不希望使用字符串或任何字符串 我试过了,但似乎不起作用。我总是得到相同的输出 我不想使用:字符串,输入必须是任意长度。 #include <iostream> #include <stdio.h> using namespace std; char * getline(){ char * buf = new char[10]; int result = scanf("%as\n", &buf); if

我想从输入中读取无限长的文本行。我不希望使用字符串或任何字符串

我试过了,但似乎不起作用。我总是得到相同的输出

我不想使用:
字符串
,输入必须是任意长度。

  #include <iostream>
#include <stdio.h>
using namespace std;

char * getline(){
    char * buf = new char[10];
    int result = scanf("%as\n", &buf);
    if (result < 0) {
        if (NULL != buf)
            delete []buf;
        return NULL;
    }
    return buf;
}

int main(){
    char* haha =  getline();
    cout <<haha << endl;
    return 0;
}
#包括
#包括
使用名称空间std;
char*getline(){
char*buf=新字符[10];
int result=scanf(“%as\n”,&buf);
如果(结果<0){
如果(NULL!=buf)
删除[]buf;
返回NULL;
}
返回buf;
}
int main(){
char*haha=getline();

cout
char*buf;
只创建指针变量,但不分配内存

使用:
buf=newchar[…]

显然,由于您的计算机没有无限内存,您需要指定一个大小,而不是

并将其删除为:
delete[]buf

但是,我认为最好的解决办法是:

std::string s;
std::cin >> s;

无法读取不存在的缓冲区!此处
buf
指向内存中未定义的位置,此代码最有可能导致崩溃。您必须分配一些空间(使用
new[]
)在将数据读入之前;当然,该空间必须具有明确定义的大小。您随时都可以分配一个新的大缓冲区,并将较小缓冲区的内容复制到其中;这就是您“增长”的方式C++中的内存块,以及字符串> /Cux>内部如何工作。

为什么要避免<代码> STD::String
?和你分配10个字符缓冲区的代码的哪一部分是用来处理“无限长文本行”“%AS”的?在SCANF中,没有标准C++。没有使用“C++”>“字符串< /代码>或其他容器,或者滚动自己的循环,没有办法完成您的请求。”代码> %s>代码>只读取第一个空白,而不是行的末尾。如果您对GCC Exchange感到满意,可以使用GCC函数<代码> SsiZeZt GETLIN。(字符**BUFPTR,大小*N,文件*FP);
std::string的有趣之处在于,你可以阅读任何长度。不必担心大小。但我不想指定输入的长度,我想canf会为我分配
buf
。@Yoda不,不会。如果你想避免使用
std::string
,你必须自己重新实现它的那部分-r读取一个固定大小的缓冲区,检查是否已经全部读取,如果没有,分配一个更大的缓冲区,复制,读取另一个块,冲洗,重复。