代码之家  ›  专栏  ›  技术社区  ›  Eugene Yarmash

为什么printf和sprintf在只给定一个数组时表现不同?

  •  10
  • Eugene Yarmash  · 技术社区  · 15 年前
    sub do_printf  { printf @_ }
    sub do_sprintf { print sprintf @_ }
    
    do_printf("%s\n", "ok");  # prints ok
    do_sprintf("%s\n", "ok"); # prints 2
    
    5 回复  |  直到 15 年前
        1
  •  13
  •   Mark    15 年前

    perldoc on sprintf

    与printf不同,sprintf不这样做 当你经过的时候你可能是什么意思 数组被赋予标量上下文,并且 而不是使用 数组中元素的计数为

        2
  •  14
  •   codeholic    15 年前

    sprintf $@ 虽然 printf 拥有的原型 @

        3
  •  9
  •   Tim Cooper    14 年前

    看见 codeholic 的和 Mark

    作为解决方法,只需执行以下操作:

    sub do_sprintf { print sprintf(shift, @_) }
    

    sub do_printf  { printf @_ }
    sub do_sprintf { print sprintf(shift, @_) }
    
    do_printf("%s\n", "ok");  # prints ok
    do_sprintf("%s\n", "ok2"); # prints ok2
    
        4
  •  2
  •   Axeman maxelost    15 年前

    他们做不同的事情。 对于 printf 输出为 一条小溪;对于 sprintf 你需要构造字符串。它处理 格式化 (the) F )打印命令的。主要目的是 打印F 是将它构造的值打印到一个流中,但是使用s(tring)printf(ormat)您只需要 创造

    打印F 返回作为反馈打印到流的字符数。一旦字符被打印到流中,它们就从程序的逻辑结构中传递出去了。与此同时, 把格式数据写成串

    为什么?

        5
  •  1
  •   crazyscot    15 年前

    sprintf在标量上下文中计算数组。您的数组有两个元素,因此它的计算结果为“2”(不带尾随符)。