C格式说明符"%n"在Java中

时间:2017-10-07 13:36:41

标签: java c printf

所以我开始学习java,我想知道我是否可以使用"%n"参数(来自C printf()),它应该写入写入"%n"的字节数。参数:

这是它在C:

中的用法
#include <stdio.h>

int main()
{
  int val;

  printf("ciao %n ciao\n", &val);

  printf("val = %d\n", val);

  return 0;

}

打印:

ciao  ciao
val = 5

但是当我尝试在java中使用它时:

public class CharTest
{ 
   public static void main(String[] argv)
   {    
      int  value;

      System.out.printf("\nNumber of bytes written up to now: %n\n", &value); 
      System.out.println(value);
   }
}

java编译器给了我这条消息:

CharTest.java:20: error: illegal start of expression

System.out.printf("\nNumber of bytes written up to now: %n\n", &value); 
                                                               ^
1 error

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在C中,您可以通过引用传递参数或通过传递指向它们的指针来更改传递给函数的变量的值,%n说明符存储到目前为止value中写入的字符数和为了做到这一点,你必须将指针传递给value &value

在Java中,不可能通过引用传递参数或传递变量指针,并且无法使用相同的语法,&运算符是按位的。 Java中的printf %n说明符打印特定于平台的行分隔符。

答案 1 :(得分:0)

你根本不能用Java做这件事。没有与%n C的printf对应的转化。相反,您可以使用String.format格式化字符串

String s = String.format("\nNumber of *%s* written up to now: ", "characters");

然后检查s中的字符数,并单独格式化:

int len = s.length()
String result = String.format("%s%d\n", s, len);

最后,请注意,与C不同,charbyte的确切同义词,在Java中字符串甚至不包含字节,而是Unicode / UTF-16代码点。询问字符串格式化操作写入的字节数是没有意义的。