【问题标题】:How I can control the length of the string that I want to enter during runtime and then reallocate the memory to store larger string?如何控制我想在运行时输入的字符串的长度,然后重新分配内存以存储更大的字符串?
【发布时间】:2022-01-09 05:33:29
【问题描述】:

例如,我想输入一个只能存储五个元素的字符串。它可以是 "Hello",但如果我输入超过 5 个元素,例如 "Hello World"。它只存储 "Hello" 部分。我想控制使用malloc() 函数在字符串中输入的元素的大小或数量。这样我以后可以使用 realloc() 更改字符串的大小以存储更大的字符串,例如 "Hello World" 或将原始字符串与新字符串连接起来,就像我们使用strcat()函数。

我是 C 新手,英语不是我的第一语言。所以,如果有什么不明白的地方,请告诉我。

有可能吗?

【问题讨论】:

  • 一种选择是在循环中使用getchar。存储前五个字符的结果,然后不要存储任何您想忽略的剩余字符。
  • 如果您使用的是 Unixy 系统,getline() 可以为您解决问题

标签: c string malloc dynamic-memory-allocation dynamic-arrays


【解决方案1】:

对于许多应用程序来说,简单地使用大缓冲区...

#define LINE_SIZE 100  // Be generous in size
char buf[LINE_SIZE];

...并使用fgets() 读取用户输入的

if (fgets(buf, sizeof buf, stdin)) {
  // Success!

  // If deisred, lop off potential trailing \n
  buf[strcspn(buf, "\n")] = '\0';

将该行读入字符串后,再解析字符串中的“元素个数”。

您无法控制用户输入的内容。代码可以控制其处理输入的方式。为不正确、愚蠢和敌对的输入做好准备。


高级:如果您想要无限长度的输入(请注意您希望的内容),则需要更高级的策略和代码来处理内存分配/重新分配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2017-10-29
    • 2021-07-27
    相关资源
    最近更新 更多