c++ - 有什么方法可以在不知道它的大小的情况下制作一个字符数组

标签 c++ c arrays

char* a = new char[50];

这是一项学校作业。我不允许使用字符串或 vector 或其他任何东西。只是字符数组。

假设我想执行 cin >> a; 并且我不知道输入的大小。我应该如何将它放在 char 数组中?以上仅适用于小尺寸输入。

我应该这样做吗? char* a = new char[some_large_number]; 还是有更好的方法?

我只能使用(动态)字符数组。

编辑:输入可以是任何字符串,例如 abcd 甚至 somelongrandomsentecewithoutspsomelongrandomsentecewithoutspacessomelongrandomsentecewithoutspaces

最佳答案

这对于字符数组来说有点棘手:您需要做的是告诉 cin 您不想接收超过一定数量的字符(对于 50 个字符的缓冲区为 49,因为你需要空终止符的空间)。读取完成后,检查字符串的长度。如果是49,分配一个新的更大的字符串,把旧的字符串复制进去,继续读。如果小于49,则已到达字符串末尾。

您可以使用 istream::get将数据读入缓冲区:

cin.get(a, 50); // You can specify an optional delimiter as a third parameter

请注意,您将长度传递给 50,get 将自动减去 1,因为它知道空终止符所需的空间。

关于c++ - 有什么方法可以在不知道它的大小的情况下制作一个字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431924/

相关文章:

c++ - 如何包装可变参数模板函数?

c++ - 包括CallbackGroups后ROS通信未响应

使用现有 C 文件在 Eclipse 项目中创建

c - 如何初始化二维字符数组的内容?

jquery - 在 jQuery 中选择 5 个随机列表项作为数组

Javascript将数组转换为字符串并使其反向输出

c++ - 如何在 C++ 中将字节类型的 char 数组数据保存到文件中?

c++ - mfc 复制 CString 的某些部分

c++ - 段上的埃拉托色尼筛法

c - 意外循环 (C)