Java中的C格式说明符“%n”
因此,我开始学习java,我想知道是否可以使用C printf中的%n参数,它应该写入写入%n参数的字节数: 这是它在C中的用法: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
#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);