我正在阅读Effective Java,它%n用于所有地方的换行符.我\n在Java程序中使用了相当成功的换行符.
哪个'正确'?怎么了\n?为什么Java改变了这个C约定?
我正在编写一个bash shell脚本来显示进程是否正在运行.
到目前为止,我得到了这个:
printf "%-50s %s\n" $PROC_NAME [UP]
Run Code Online (Sandbox Code Playgroud)
代码给了我这个输出:
JBoss [DOWN]
GlassFish [UP]
verylongprocessname [UP]
Run Code Online (Sandbox Code Playgroud)
我想用' - '或'*'填补两个字段之间的空白,使其更具可读性.如何在不扰乱田地对齐的情况下做到这一点?
我想要的输出是:
JBoss ------------------------------------------- [DOWN]
GlassFish --------------------------------------- [UP]
verylongprocessname ----------------------------- [UP]
Run Code Online (Sandbox Code Playgroud) 我有一个C程序编译成一个名为myprogram的可执行文件.这是它的主要功能:
int main(int argc, char ** argv) {
printf("this is a test message.\n");
system("ls");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我myprogram > output.txt在Linux shell中运行然后检查output.txt时,我看到ls上面列出的输出"这是一条测试消息".
我觉得应该是相反的方式.为什么会发生这种情况,我能做些什么,以便"这是一条测试消息"出现在output.txt的顶部?
如果重要的话,我是C的新手并且在命令行中工作.
假设你有一个未null终止的字符串并且你知道它的确切大小,那么如何printf在C中打印该字符串呢?我记得这样的方法,但现在我找不到...
在C中,使用printffrom 来打印到标准输出很容易stdio.h.
但是,如何打印到stderr?我们可以fprintf用来实现它,但它的语法似乎很奇怪.也许我们可以printf用来打印到stderr?
我有以下内容
size_t i = 0;
uint32_t k = 0;
printf("i [ %lu ] k [ %u ]\n", i, k);
Run Code Online (Sandbox Code Playgroud)
编译时我收到以下警告:
format ‘%lu’ expects type ‘long unsigned int’, but argument has type ‘uint32_t’
Run Code Online (Sandbox Code Playgroud)
当我使用夹板运行时,我得到以下内容:
Format argument 1 to printf (%u) expects unsigned int gets size_t: k
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议,
Python至少有六种格式化字符串的方法:
In [1]: world = "Earth"
# method 1a
In [2]: "Hello, %s" % world
Out[2]: 'Hello, Earth'
# method 1b
In [3]: "Hello, %(planet)s" % {"planet": world}
Out[3]: 'Hello, Earth'
# method 2a
In [4]: "Hello, {0}".format(world)
Out[4]: 'Hello, Earth'
# method 2b
In [5]: "Hello, {planet}".format(planet=world)
Out[5]: 'Hello, Earth'
# method 2c
In [6]: f"Hello, {world}"
Out[6]: 'Hello, Earth'
In [7]: from string import Template
# method 3
In [8]: Template("Hello, $planet").substitute(planet=world)
Out[8]: 'Hello, Earth'
Run Code Online (Sandbox Code Playgroud)
不同方法的简要历史:
printf自Pythons婴儿期以来,风格格式一直存在 …python printf string-formatting backwards-compatibility deprecated
我有一些C++代码打印出size_t:
size_t a;
printf("%lu", a);
Run Code Online (Sandbox Code Playgroud)
我希望在32位和64位架构上编译时不会发出警告.
如果这是C99,我可以使用printf("%z", a);.但是AFAICT %z在任何标准C++方言中都不存在.所以相反,我必须这样做
printf("%lu", (unsigned long) a);
Run Code Online (Sandbox Code Playgroud)
这真的很难看.
如果没有size_t内置于该语言中的打印功能,我想知道是否可以编写一个printf包装器或类似的东西,这样可以在size_ts 上插入适当的强制转换,以便在保持好的编译器警告的同时消除虚假的编译器警告.
有任何想法吗?
所以我终于通过K&R阅读,并且我在前几页中学到了一些东西,即有一个退格转义字符\b.
所以我去测试它,并且有一些非常奇怪的行为:
#include <stdio.h>
main ()
{
printf("hello worl\b\bd\n");
}
Run Code Online (Sandbox Code Playgroud)
输出是
hello wodl
Run Code Online (Sandbox Code Playgroud)
有谁能解释一下?