Java中的C格式说明符“%n”

Java中的C格式说明符“%n”,java,c,printf,Java,C,Printf,因此,我开始学习java,我想知道是否可以使用C printf中的%n参数,它应该写入写入%n参数的字节数: 这是它在C中的用法: #include <stdio.h> int main() { int val; printf("ciao %n ciao\n", &val); printf("val = %d\n", val); return 0; } 但当我尝试在java中使用它时: public class CharTest { pub

因此,我开始学习java,我想知道是否可以使用C printf中的%n参数,它应该写入写入%n参数的字节数:

这是它在C中的用法:

#include <stdio.h>

int main()
{
  int val;

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

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

  return 0;

}
但当我尝试在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

我该如何解决这个问题?

在Java中根本无法做到这一点。没有对应于printf C的%n的转换。相反,您可以使用来格式化字符串

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中char是byte的同义词不同,在Java中,字符串甚至不由字节组成,而是由Unicode/UTF-16码点组成。询问字符串格式化操作写入了多少字节是没有意义的。

在C中,您可以通过引用传递参数,或者通过向函数传递指针来更改传递给函数的变量的值,%n说明符存储到目前为止写入值中的字符数,为此,必须使用&value传递指向值的指针


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

它会回答你的问题。它根本不应该是C,因为它是一个简单的攻击向量。@ AnttiHaapala,它可能是一个成员数组的int,但我认为这超出了这个问题的范围。
int len = s.length()
String result = String.format("%s%d\n", s, len);