假设你有一个string不是null终止,你知道它的确切大小,所以你怎么能打印在C中的printfstring? 我记得这样的方法,但现在我找不到
我正在编写一个bash shell脚本来显示一个进程是否正在运行。 到目前为止,我在这里。 printf "%-50s %s\n" $PROC_NAME [UP] 这给了我一个输出,如: JBoss [DOWN] GlassFish [UP] verylongprocessname [UP] 我想用“ – ”或“*”填充两个字段之间的空白,以使其更具可读性。 我怎样才能做到这一点,而不会干扰领域的一致? 我想要的输出是: JBoss ——————————————- [DOWN] GlassFish ————————————— [UP] verylongprocessname —————————– [UP]
使用printf时,如何在左边填充一个空格string? 例如,我想打印“Hello”,前面有40个空格。 另外,我想打印的string由多行组成。 我需要分别打印每一行吗? 编辑:只是要清楚,我想正好打印每行前40个空格。
语句printf("%f\n",0.0f); 打印0。 但是,语句printf("%f\n",0); 打印随机值。 我意识到我正在展示某种不确定的行为,但是我无法弄清楚为什么特别。 所有位都是0的float值仍然是一个有效值为0的float 。 float和int在我的机器上是相同的大小(如果甚至是相关的)。 为什么在printf中使用整数文字而不是浮点文字会导致这种行为?
#include <stdio.h> int main() { float a = 1234.5f; printf("%d\n", a); return 0; } 它显示一个0 ! 这怎么可能? 什么是推理? 我有意在printf语句中join%d来研究printf的行为。
Haskell的types安全性对于依赖types语言来说是首屈一指的 。 但是, Text.Printf有一些非常神奇的东西 ,看起来相当不可思议 。 > printf "%d\n" 3 3 > printf "%s %f %d" "foo" 3.3 3 foo 3.3 3 这背后有什么深奥的魔力? Text.Printf.printf函数如何使用像这样的可变参数? 什么是用于允许在Haskell中可变参数的一般技术,它是如何工作的? (注意:使用这种技术时,某些types的安全性显然已经丢失。) > :t printf "%d\n" "foo" printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t
在我正在阅读的一本书中,写了带有一个参数(不带转换说明符)的printf被弃用。 它build议替代 printf("Hello World!"); 同 puts("Hello World!"); 要么 printf("%s", "Hello World!"); 有人可以告诉我为什么printf("Hello World!"); 是错的? 它是写在书中,它包含漏洞。 这些漏洞是什么?
我有一些打印size_t C ++代码: size_t a; printf("%lu", a); 我希望在32位和64位架构上编译时不会有任何警告。 如果这是C99,我可以使用printf("%z", a); 。 但是AFAICT %z不存在任何标准的C ++方言。 相反,我必须这样做 printf("%lu", (unsigned long) a); 这真的很丑。 如果没有内置的语言打印size_t的设施,我想知道是否可以编写一个printf包装器,或者是这样的,以便在size_t上插入适当的强制转换,从而消除虚假的编译器警告,同时保持良好的状态。 有任何想法吗? 编辑为了澄清为什么我使用printf:我有一个相对较大的代码库,我正在清理。 它使用printf包装来执行诸如“写入警告,将其logging到文件中,并可能退出错误代码”等。 我可能能够鼓起足够多的C ++ -foo来使用cout包装器来做到这一点,但是我宁愿不改变程序中的每一个warn()调用来摆脱一些编译器警告。
C中%n格式说明符的用法是什么? 任何人都可以解释一个例子吗?
这是一个比一个重要的问题更好奇的查询,但是为什么当打印hex数字为前导零的8位数字时,是否这样做%#08X不显示与0x%08X相同的结果? 当我尝试使用前者时, 08格式化标志被删除,并且仅用8就不起作用。 我只是好奇而已。