%n无法在printf中工作

时间:2013-02-23 14:50:44

标签: c

我有问题,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 个答案:

答案 0 :(得分:5)

查看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;
}

此代码适用于我。

答案 1 :(得分:1)

您需要将指针传递给n

答案 2 :(得分:0)

n的参数需要是一个指向有符号int的指针,而不是一个带有sin的int。

答案 3 :(得分:0)

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

请参阅the C99 Standard

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

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