"my ultimate goal is to get the simplest code to determine the size of the input, and not limit the user."
是的,这就是问题所在,一旦你这样做,事情就会变得棘手。您不能简单地使用这样的未初始化指针来获取“尽可能多”的字符。最简单的选项是:
char *str = malloc(1000);
scanf ("%999s", str);
或者
char str[1000];
scanf ("%999s", &str);
当然,这限制了输入量。(顺便说一句:你真的应该评估是否有一个数字可以满足这个条件。)
现在还有其他选择,但它们开始远离便携性。如果您使用的是 GCC,则可以使用“动态”规范:
char *str;
scanf("%ms", str); // dynamically allocate space for the size of input from the user
但是现在使用它会将您的手与正在使用的编译器联系起来(也是版本,这适用于 c99,早期需要"%as"
)
除此之外,您可以一次读取 1 个字符的输入并将其附加到您自己增长的字符串中,但这是一个特定于操作系统的解决方案,因为您需要使用*nix 或windows中ncurses
的函数。getch()
_kbhit()
_getch();