C:扫描期间的动态分配

标签 c scanf dynamic-allocation

我想知道在使用 scanf 时/之前是否有任何方法可以动态分配一些内存。这意味着在初始化 char * 时不需要给它一个大小。取而代之的是,将根据输入字符串的大小分配所需的内存量(这意味着:在输入之后)。

目前我找不到其他解决方案,只能在输入之前分配特定数量的内存,所以在知道输入的大小之前:

char str[10];
scanf("%s", str);

而且我知道这不安全:如果输入超过 10 个字符,程序将写入未分配的内存,这可能会导致段错误或类似问题。

最佳答案

正如评论中指出的那样,我相信 %m 可以解决您的问题

另一种方法是将输入限制为您知道已分配给变量的数字字节,例如 %10s 将仅输入 10 个字符 然后重新分配你的输入变量,为下一次调用 scanf 时输入更多字符腾出空间,你需要在下一次调用中像 &str[10] 一样传递 str,这样它就不会覆盖之前的输入

关于C:扫描期间的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717204/

相关文章:

C - 在结构内动态分配结构的循环缓冲区

c - 选择排序功能错误

c - 用逗号分隔的多个值的宏实际上是什么意思?

c - 如何读取字符串并加倍文本文件,同时记录文件中的行数?

c - 我怎样才能从c中的一行中提取单词?

c++ - 在 C++ 的类函数中引用二维数组

c++ - 相当于缓冲区上的 fgets?

c - 我的 sscanf 如果陷入无限循环,我该如何修复它

c - 为什么为 scanf 输入添加多个句点会跳过下一个 scanf 函数?

c - 如果程序由于错误而提前退出,释放动态分配内存的正确方法是什么?