最大 n 文字の文字列を読み取り、改行文字まで他のものを破棄するために、scanf で正規表現を使用しようとしています。スペースはすべて通常の文字として扱われる必要があるため、読み取られる文字列に含まれます。正規表現に関するウィキペディアの記事を調べましたが、scanf を正しく動作させることができません。ここに私が試したいくつかのコードがあります:
scanf("[ ]*%ns[ ]*[\n]", string);
[ ] は実際の空白文字、* は 1 つ以上を意味し、n は読み取る文字数、string は malloc で割り当てられたポインターです。いくつかの異なる組み合わせを試しました。ただし、文の最初の単語だけを読む傾向があります (スペース文字で停止します)。さらに、* は「ゼロ以上」を意味するのではなく、文字を破棄するようです...
正規表現が scanf によってどのように解釈されるかを詳しく説明できる人はいますか? さらに、代わりに getc を繰り返し使用することは効率的ですか?
前もって感謝します:D