标签: printf

printf中可变大小的填充

有没有办法让可变大小的填充printf

我有一个整数表示填充有多大:

void foo(int paddingSize) {
    printf("%...MyText", paddingSize);
}
Run Code Online (Sandbox Code Playgroud)

这应该打印出### MyTextpaddingSize应该决定'#'符号数量的位置.

c formatting printf

26
推荐指数
1
解决办法
2万
查看次数

printf/sprintf带有数组参数而不是变量

喜欢

$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等存在?

php arrays string printf

26
推荐指数
1
解决办法
1万
查看次数

C:printf中的ptrdiff_t应该使用哪个字符?

哪些字符应该用于ptrdiff_tprintf

请问C标准明确说明如何打印ptrdiff_tprintf?我还没找到任何人.

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)

c printf pointers

26
推荐指数
3
解决办法
5704
查看次数

为什么printf中相同表达式的输出与cout不同?

我正在使用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的怪癖?

c c++ floating-point printf cout

26
推荐指数
5
解决办法
3232
查看次数

我如何在gdb中的"打印到终端上的东西"中加上断点?

我想知道在一个巨大的应用程序里面打印某个消息.应用程序是如此庞大和陈旧,它使用所有可能的方式将文本打印到终端; 例如printf(),fprintf(stdout,...)等.

我写了在write()系统调用上设置了一个断点,但是由于使用write()的各种文件I/O操作,我遇到了太多的断点停止.

所以基本上我希望gdb在程序向终端输出内容时停止,但同时我不希望gdb在程序向文件写入内容时停止.

printf gdb breakpoints conditional-breakpoint

25
推荐指数
2
解决办法
9088
查看次数

Java中printf的双%格式化问题

%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 printf

25
推荐指数
3
解决办法
12万
查看次数

为什么String的格式(Object ... args)被定义为静态方法?

我想知道为什么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#中,还使用静态方法而不是实例方法.

我想知道为什么他们决定这样做,但我没有得到解释.实例方法trimsubstring返回一个新的string实例,所以他们应该做同样的事情format.

此外,该DateFormat课程还使用了这个:

public final String format(Date date)
Run Code Online (Sandbox Code Playgroud)

用于格式化日期.因此,如果我们将DateFormat的实例视为格式化程序,则String的实例也可以用作格式化程序.

有任何想法吗?

java string format printf

24
推荐指数
3
解决办法
1万
查看次数

bash中的Printf示例不会创建换行符

与工作printf在bash脚本,加入无空格后"\n"不创建换行符,而添加的空间中形成一个换行符,E.G.:

  1. 之后没有空间 "\n"

    NewLine=`printf "\n"`
    echo -e "Firstline${NewLine}Lastline"
    
    Run Code Online (Sandbox Code Playgroud)

    结果:

    FirstlineLastline
    
    Run Code Online (Sandbox Code Playgroud)
  2. 之后的空间 "\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)

bash printf

24
推荐指数
3
解决办法
6万
查看次数

实现定义类型的格式说明符,如time_t

我想让我的代码更加平台/实现独立.time_t在编译代码时,我不知道将在平台上实现什么.我如何知道t要确定使用哪种格式说明符的类型?

...
time_t t = time(NULL);
printf("%s", t);
...
Run Code Online (Sandbox Code Playgroud)

c printf typedef time-t

24
推荐指数
3
解决办法
2万
查看次数

为什么PRIu64不能在此代码中工作?

根据这个答案,我尝试打印一个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)

c++ printf c++03

23
推荐指数
3
解决办法
2万
查看次数