当前位置: 代码迷 >> C语言 >> [问题已解决]有人用过%n这样的格式化字符串么?
  详细解决方案

[问题已解决]有人用过%n这样的格式化字符串么?

热度:159   发布时间:2008-02-19 11:01:58.0
[问题已解决]有人用过%n这样的格式化字符串么?
怎么也查不到 %n 这种格式化字符串的用法,有哪位大哥用过,能否简单给个例子,谢谢啦。

MSDN的解释是这样的
Number of characters successfully written so far to the stream or buffer; this value is stored in the integer whose address is given as the argument.

成功写入流或缓冲的字符个数;这个值被保存为整型数,作为参数给出的地址。(不知道翻译有没有问题)

MSDN没有提供实例,怎么用也用不起来,郁闷!w

[[it] 本帖最后由 yuki 于 2008-2-19 12:16 编辑 [/it]]
搜索更多相关的解决方案: 字符  格式化  MSDN  argument  整型  

----------------解决方案--------------------------------------------------------
%n  说明一个整数类型的指针
----------------解决方案--------------------------------------------------------
http://www.itcai.net/soft/P545/I746290.shtml
是不是这个,你看看
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]永夜的极光[/un] 在 2008-2-19 11:10 的发言:[/bo]

http://www.itcai.net/soft/P545/I746290.shtml
是不是这个,你看看


不是格式化字符串的文法规则是这样的
FMTSTR --> % FLAGS WIDTH PRECISION TYPE
FLAGS --> +|-|0|#|epsilon
WIDTH --> UINT|%|*|epsilon
PRECISION --> . UINT|epsilon
TYPE --> ARGSZ SUBTYPE
ARGSZ --> h|l|I64|L|epsilon
SUBTYPE --> c|C|d|i|o|u|x|X|e|E|f|g|G|n|p|s|S
UINT --> DIGIT DIGIT*
DIGIT --> [0-9]

只有在SUBTYPE可以生成到n,也就是说n作为类型出现,不是类型的前缀ARGSZ产生式
在旧版本的printf函数中,前缀N或F表示近指针或远指针

不过还是感谢你提供的帮助。

[[it] 本帖最后由 yuki 于 2008-2-19 11:38 编辑 [/it]]
----------------解决方案--------------------------------------------------------
本帖最近评分记录
  • yuki +2 感谢! 2008-2-19 12:08
2008-02-19 03:29:33
yuki

等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
  得分:0 
[bo]以下是引用 [un]lonmaor[/un] 在 2008-2-19 11:29 的发言:[/bo]

32543


int a = 10;
int *i = &a;
printf("%n",i);

可是这样作为一个整数指针传入,什么都不显示。
----------------解决方案--------------------------------------------------------
google了一下。发现了这个:
http://weblogs.asp.net/george_v_reilly/archive/2007/02/06/printf-n.aspx

里面提及:
... "%n is dangerous and disabled by default in Visual Studio 2005."
本帖最近评分记录
  • yuki +2 感谢 2008-2-19 12:08
2008-02-19 03:51:20
xianshizhe111

等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
  得分:0 
原来试过和楼主一样的结果(根本不让输入)
再说了:资料说的也不一样,有的说,读入一个整型数,其值等于已读入的字符个数,说法太多.
没有试出来.

[[it] 本帖最后由 xianshizhe111 于 2008-2-19 12:08 编辑 [/it]]
本帖最近评分记录
  • yuki +1 感谢 2008-2-19 12:08
2008-02-19 04:06:47
yuki

等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
  得分:0 
感谢,我已经知道怎么用了。
也就是说出现%n处,会统计前面所有输出的字符个数,然后写入%n处通过参数传入的指向整型数据的指针;

举例:
int a;
char *s="Hello";
printf("%s,World!%n\n",s,&a);
printf("%d\n",a);
输出:Hello,World!
      12
本帖最近评分记录

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2008-02-19 04:07:35
永夜的极光

等 级:贵宾
威 望:27
帖 子:2720
专家分:1
注 册:2007-10-9
  得分:0 
这个倒是挺有意思的
----------------解决方案--------------------------------------------------------
  相关解决方案