#str = "debug the printf of the php";
printf("%'aa25s",#str);输出的结果是25s。
我想知道这是什么原因啊 ! 是怎么解析成25s的。

解决方案 »

  1.   

    改成这样<?php
    $str = "debug the printf of the php";
    printf("%s'aa25s",$str);
    ?>
      

  2.   

    $str = "debug the printf of the php";
    printf("%'a125s",$str);//这将在字符串不足125位时,前面补a,有点像str_pad的部分作用了
      

  3.   

    $str = "debug the printf of the php";
    printf("%'a50s",$str);
    作为充填字符的职能是一个字符
    你用 %`aa25s 的话就会将前面的 %`aa 视为一个规则串,而 %a 规则是没有输出的,所以只输出了 25s
      

  4.   

    1楼的意思跟我的想法完全不一样。
    2楼的, 我是那个意思。 我先是printf("%'a25s",&str);这样的。
    后来我好奇,想试下如果是两个aa会是什么样的,那就成了25s。 我现在想知道为什么?
      

  5.   

    我是这么理解。不知道是否正确。$str="debug the printf of the php";
    printf("%'aa25s",$str);对于这个字符串。printf("%'a25s",$str);与 printf("%'as",$str);等价。也就是说给了类型s就成。原来的字符串超过了25。因此不会补充a。那么对于%'aa25s。解析的时候首先碰到$'a:少了补充a。接着到第二个a。a不属于类型控制符。那么程序到此解析完毕。此后原样打印25s。后面的$str由于与前面的类型没有匹配而没有输出。以上讨论仅为根据结果进行推论。还请高手指点。
      

  6.   

    以上讨论受到了xuzuning的启发。
    不知道是否曲解了xuzuning的原意。
      

  7.   


    printf()是PHP中经常用到的格式化输出函数。语法:
    int printf(string format, mixed[args]…)功能:此函数的作用是向网页中输出一个格式化字符串,参数format用于指定输出字符串的格式,该参数由普通字符和格式转换符组成,其中的普通字符按原样输出,格式转换符则由后面的参数替代输出。格式转换符以“%”号开头,依次包括以下几个部分。
    (1)填充描述符:用于指明用什么字符填充字符串的剩余空间,该部分可选。
    (2)对齐描述符:用于指明字符串的对齐方式,默认为右对齐,当使用“-”时表示左对齐,该部分可选。
    (3)宽度描述符:用于指明此格式转换符占用的字符宽度,该部分可选。
    (4)精度描述符:用于指明浮点数小数位数,该部分只对浮点数有效,该部分可选。
    (5)类型描述符:用于指明参数类型,该部分可用的类型如表10.1所示。表10.1 类型描述引用符    号 说    明% 表示不需要参数b 参数被转换成二进制整型c 参数被转换成整型,且以ASCII码显示d  参数被转换为十进制整型符    号 说    明f  参数被转换为浮点型o  参数被转换为八进制整型s 参数被转换为字符串x 参数被转换为十六进制数,a~f用小写字母表示X 参数被转换为十六进制数,a~f用大写字母表示