2016-11-25 12 views
3

scanfを使用してstringを読み込み、その後実際のstrの長さを取得してからreallocを取得します。私は%nnumber 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":

+7

"%[^ \ n] s%n" ' - " '%[^ \ n]%n" ' – BLUEPIXY

+0

これは意味をなさないが動作します。ありがとう! – Sam

+0

@BLUEPIXY説明を追加してください。 –

答えて

2

BLUEPIXYはコメントで、この質問に答えました。 sは変換指定子ではないという指定です。一致した文字として解釈されます。しかし、一致する文字は実際には存在しないので、入力はsで失敗します。したがって%nは解釈されません。

関連する問題