gpt4 book ai didi

c++ - 如何在C++中读取未知大小的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:28 24 4
gpt4 key购买 nike

我是一名新手,无论是编码还是英语。这是我的代码:

#include<iostream>
#include<cstdio>

using namespace std;

int main()
{
int n = 1;
char *a = new char[n], c = getchar();
while ((c != EOF) || (c != '\n'))
{
a[n-1] = c;
c = getchar();
n++;
}
cout << a;
delete[] a;
return 0;
}

我正在学习动态内存分配。问题是输入一个长度未知的字符串。我的想法是一个字符一个字符地读取字符串,读到EOF\n时停止。能否请您指出错误?

还有一个问题:有人告诉我new 选择指定大小的内存块。那么如果没有足够大的 block 会怎样呢?

感谢您的帮助!

最佳答案

[I know adhering to best practices and methods available is the "good"thing to do, but the OP should know why the current code doesn't workand the other answers here do not seem to be answering that]

首先,您应该为此使用 C++ string 类。

其次,如果您想知道为什么您当前的代码不起作用,那是因为:

  1. while 中的条件错误。它说,“如果字符不是 \n 或不是 EOF,则执行此 block ”。所以即使你按下回车(c is '\n'),这个 block 仍然会执行,因为“c is not EOF ”,反之亦然。

  2. 您只为 char* 分配了 1 个字节的内存,这显然是不够的。

这应该可以很好地复制您想要的内容,但是分配的内存是静态的并且必须限制字符串。

int main()
{
int n=1;
char *a = new char[100],c=getchar();
while(true)
{
if(c == '\n' || c == EOF){
break;
}
a[n-1]=c;
c=getchar();
n++;
}
cout << a;
delete[] a;
return 0;
}

关于c++ - 如何在C++中读取未知大小的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35657432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com