0

問題があります。printf の %n が機能しません。win7 で Dev-Cpp 5.3.0.4 を使用しています。

#include<stdio.h>
int main(void)
{
int n;
char *x;
gets(x);
printf("\n%s%n\n",x,&n);
printf("n: %d\n",n);
return 0;
}

出力:

hello how are you?

hello how are you?n: 2046

--------------------------------
Process exited with return value 0
Press any key to continue . . .

なぜ?どうすれば解決できますか?前もって感謝します ;)

4

4 に答える 4

6

マンページを見てくださいprintf

   n      The  number of characters written so far is stored into the integer indicated by the int
          * (or variant) pointer argument.  No argument is converted.

そのため、intへのポインターを渡す必要があります。また、Xavier Holt が指摘したように、有効なバッファを使用して読み込む必要があります。これを試して:

#include <stdio.h>
int main(void)
{
  int n;
  char x[1000];
  fgets(x, 1000, stdin);
  printf("\n%s%n\n",x,&n);
  printf("n: %d\n",n);
  return 0;
}

このコードは私にとってはうまくいきます。

于 2013-02-23T14:53:48.263 に答える
1

へのポインタを渡す必要がありますn

于 2013-02-23T14:53:40.360 に答える
0

それは "%n" 指定子の使い方ではありません。

C99 標準を参照してください。

n
引数は、この fprintf の呼び出しによってこれまでに出力ストリームに書き込まれた文字数が書き込まれる符号付き整数へのポインターでなければなりません。引数は変換されませんが、1 つが消費されます。変換指定にフラグ、フィールド幅、または精度が含まれている場合、動作は未定義です。

また、入力を保存する場所も必要です (ヒント: initialize x)

于 2013-02-23T14:56:24.353 に答える
0

への引数nは、singed int ではなく、signed int へのポインターである必要があります。

于 2013-02-23T14:54:24.770 に答える