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();
coutchar*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读取一个固定大小的缓冲区,检查是否已经全部读取,如果没有,分配一个更大的缓冲区,复制,读取另一个块,冲洗,重复。