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

to 的参数n需要是指向有符号整数的指针,而不是有符号整数。

于 2013-02-23T14:54:24.770 回答
0

这不是如何使用“%n”说明符。

请参阅C99 标准

n
参数应该是一个指向有符号整数的指针,其中写入了到目前为止通过调用 fprintf 写入输出流的字符数。没有参数被转换,但有一个被消耗。如果转换规范包括任何标志、字段宽度或精度,则行为未定义。

您还需要一些地方来存储输入(提示:初始化x

于 2013-02-23T14:56:24.353 回答