我有问题,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 . . .
为什么呢?我怎么解决?提前谢谢;)
答案 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
)