有没有办法让可变大小的填充printf?
我有一个整数表示填充有多大:
void foo(int paddingSize) {
printf("%...MyText", paddingSize);
}
Run Code Online (Sandbox Code Playgroud)
这应该打印出### MyTextpaddingSize应该决定'#'符号数量的位置.
喜欢
$args = (
'var1' => 'abc',
'var2' => 'def',
);
$text = sprintf('first var is: %1$s, second one is: %2$s', $args);
Run Code Online (Sandbox Code Playgroud)
基本上$args变量是动态的,我不知道它是否会有任何条目或多少.
文本也是,我不知道它是否需要在其中替换变量,或者多少.
我怎样才能让这样的功能,以某种方式提取元素并将其替换文本,如果这样的东西%s %d,%1$s等存在?
哪些字符应该用于ptrdiff_t在printf?
请问C标准明确说明如何打印ptrdiff_t的printf?我还没找到任何人.
int a = 1;
int b = 2;
int* pa = &a;
int* pb = &b;
ptrdiff_t diff = b - a;
printf("diff = %?", diff); // % what?
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual C++ 2012并从命令行编译以下文件:
#include <stdio.h>
int main()
{
printf("%.5f", 18/4+18%4);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
链接MSVCRT.LIB而不是LIBCMT以避免运行时错误R6002.
对于此程序,输出的值为0.00000.
但是,如果我在C++中执行完全相同的操作
#include <iostream>
using namespace std;
int main()
{
cout << 18/4+18%4 << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,它打印出6,就像它应该的那样.
有什么不同?它与语言本身(C vs C++)或输出方法(cout vs printf)有关,还是只是与MSVC的怪癖?
我想知道在一个巨大的应用程序里面打印某个消息.应用程序是如此庞大和陈旧,它使用所有可能的方式将文本打印到终端; 例如printf(),fprintf(stdout,...)等.
我写了在write()系统调用上设置了一个断点,但是由于使用write()的各种文件I/O操作,我遇到了太多的断点停止.
所以基本上我希望gdb在程序向终端输出内容时停止,但同时我不希望gdb在程序向文件写入内容时停止.
%s是一个字符串printf,%d是我认为的小数......但是在放入时
writer.printf("%d dollars is the balance of %s\r\n", bal, nm);
Run Code Online (Sandbox Code Playgroud)
..抛出一个异常告诉我%d!= lang.double.想法?
我想知道为什么Java 5及以上版本在String类中使用静态方法提供了printf样式的格式化程序,如下所示:
public static String format(String format, Object... args)
Run Code Online (Sandbox Code Playgroud)
代替
public String format(Object... args)
Run Code Online (Sandbox Code Playgroud)
这样我们就可以写出"%02d".format(5)让05代替String.format("%02d", 5).
我想如果我可以修改String类,我可以添加:
public String format(Object... args) {
return format(this, args)
}
Run Code Online (Sandbox Code Playgroud)
得到相同的结果.
我发现在C#中,还使用静态方法而不是实例方法.
我想知道为什么他们决定这样做,但我没有得到解释.实例方法trim并substring返回一个新的string实例,所以他们应该做同样的事情format.
此外,该DateFormat课程还使用了这个:
public final String format(Date date)
Run Code Online (Sandbox Code Playgroud)
用于格式化日期.因此,如果我们将DateFormat的实例视为格式化程序,则String的实例也可以用作格式化程序.
有任何想法吗?
与工作printf在bash脚本,加入无空格后"\n"不创建换行符,而添加的空间中形成一个换行符,E.G.:
之后没有空间 "\n"
NewLine=`printf "\n"`
echo -e "Firstline${NewLine}Lastline"
Run Code Online (Sandbox Code Playgroud)
结果:
FirstlineLastline
Run Code Online (Sandbox Code Playgroud)之后的空间 "\n "
NewLine=`printf "\n "`
echo -e "Firstline${NewLine}Lastline"
Run Code Online (Sandbox Code Playgroud)
结果:
Firstline
Lastline
Run Code Online (Sandbox Code Playgroud)问题:为什么不1.创建以下结果:
Firstline
Lastline
Run Code Online (Sandbox Code Playgroud)
我知道这个特定的问题本来可以使用其他技术,但我想关注为什么1.不起作用.
编辑:当使用echo而不是printf时,我得到了预期的结果,但为什么printf的工作方式不同?
NewLine=`echo "\n"`
echo -e "Firstline${NewLine}Lastline"
Run Code Online (Sandbox Code Playgroud)
结果:
Firstline
Lastline
Run Code Online (Sandbox Code Playgroud) 我想让我的代码更加平台/实现独立.time_t在编译代码时,我不知道将在平台上实现什么.我如何知道t要确定使用哪种格式说明符的类型?
...
time_t t = time(NULL);
printf("%s", t);
...
Run Code Online (Sandbox Code Playgroud) 根据这个答案,我尝试打印一个uint64_t,但它给了我一个错误:
错误:在'PRIu64'之前预期``)'
以下是显示我想要做的最小代码:
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <cstdio>
class X {
X() {
uint64_t foo = 0;
printf("%07" PRIu64 ": ", foo);
}
};
int main() {}
Run Code Online (Sandbox Code Playgroud)
这个最小的代码编译,但我的实际代码没有.但是,我尝试X::X()在我的实际代码中使用完全相同的2行,这不起作用.
我应该寻找什么来进一步调试?我的实际代码也是#include其他标题.这会导致问题吗?包含标题的顺序是否重要?
编辑
PRIu64在我的机器上定义如下:
# if __WORDSIZE == 64
# define __PRI64_PREFIX "l"
# define __PRIPTR_PREFIX "l"
# else
# define __PRI64_PREFIX "ll"
# define __PRIPTR_PREFIX
# endif
# define PRIu64 __PRI64_PREFIX "u"
Run Code Online (Sandbox Code Playgroud)