"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 文字ずつ読み取り、それを自分で成長させた文字列に追加することができますが、これは OS 固有の解決策であり、*nix または windowoze の関数を使用する必要がありますncurses。getch()_kbhit()_getch();