我想知道在使用 scanf 时/之前是否有任何方法可以动态分配一些内存。这意味着在初始化 char *
时不需要给它一个大小。取而代之的是,将根据输入字符串的大小分配所需的内存量(这意味着:在输入之后)。
目前我找不到其他解决方案,只能在输入之前分配特定数量的内存,所以在知道输入的大小之前:
char str[10];
scanf("%s", str);
而且我知道这不安全:如果输入超过 10 个字符,程序将写入未分配的内存,这可能会导致段错误或类似问题。
最佳答案
正如评论中指出的那样,我相信 %m 可以解决您的问题
另一种方法是将输入限制为您知道已分配给变量的数字字节,例如 %10s 将仅输入 10 个字符 然后重新分配你的输入变量,为下一次调用 scanf 时输入更多字符腾出空间,你需要在下一次调用中像 &str[10] 一样传递 str,这样它就不会覆盖之前的输入
关于C:扫描期间的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717204/