scanf
を使用してstring
を読み込み、その後実際のstrの長さを取得してからrealloc
を取得します。私は%n
がnumber of chars read
を与えることを読んだので、それは私が必要とするものです。 Visual Studioではscanf_s
を使用するように求められます。各文字列の後にバッファサイズを指定する必要があります。C: "%n"(読み込まれた文字数)はscanf_sによって無視されます
は私が書く:
int actual_length;
scanf_s("%[^\n]s%n", str, MAX_STRING_LEN, &actual_length);
printf("actual length = %d\n", actual_length);
は私が取得:私が追加したとき
actual length = -858993460
だから、この%n
何も起こりませんでした。 %n
だけを取り除くと、あまりにも多くの引数があると言います。ちょうど&actual_length
を取り除くと、あまりにも少ない引数が出ます。もし私が両方の結果を取り除くならば、明らかに同じです。
私は40分ほどグーグルで試してみましたが、私は立ち往生しています。 MSDNは、%n
を処理するscanf_sに固有のことは何も述べていません。 - >この場合、 "%[^\n]%n
"
は、s
が正しくない
"%[^\n]s%n
":
"%[^ \ n] s%n" ' - " '%[^ \ n]%n" ' – BLUEPIXY
これは意味をなさないが動作します。ありがとう! – Sam
@BLUEPIXY説明を追加してください。 –