Articles of printf

Bash printf前缀

在Bash中,我可以使用printf来格式化一个string输出,如下所示: – (注意我为string添加了一个后缀W ,这不包括在填充中) $ printf "Blah %11.1fW\n" 123 456 78965 5 56 Blah 123.0W Blah 456.0W Blah 78965.0W Blah 5.0W Blah 56.0W 如果我想在string前缀,我可以这样做: – $ printf "Blah £%11.1f\n" 123 456 78965 5 56 Blah £ 123.0 Blah £ 456.0 Blah £ 78965.0 Blah £ 5.0 Blah £ 56.0 但是请注意,这是如何在前缀之前应用填充的。 如何(如果可能的话)我会使用printf来填充前的值,所以输出如下: – Blah £ 123.0 […]

壳GNU-Screen -X的东西问题

OPTIONS="java -Xms1024M -Xmx1024M -jar craftbukkit.jar" PROCESS=server01 screen -dmS $PROCESS $OPTIONS nogui # Starting the application screen -x $PROCESS -X stuff `printf "stop\r"` # Closing the application screen -x $PROCESS # Attaching to the terminal of the application 应用程序在一开始工作正常,但是我得到的问题stuff 'printf "stop/r"'我刚启动似乎不工作,等待一段时间,然后尝试用上面的命令停止它。 但奇怪的是,如果我做了screen -x $PROCESS并分离( ctrl-A & ctrl-D ),然后使用Stop命令,它确实可以工作。 所以有没有办法来stuff printf没有screen -x $PROCESS ?

如何在多个线程中使用printf()

我正在实现一个使用不同内核的multithreading程序,并且许multithreading被同时执行。 每个线程都进行printf()调用,结果是不可读的。 我怎样才能使printf()primefaces,以便一个线程中的printf()调用不会与另一个线程中的printf()调用冲突?

(x86_64 linux程序集)为什么使用float格式string的printf只能与rsp%0x10 = 0一起工作

我在x86_64 linux汇编程序上写了一个printf调用的问题。 如果我尝试在rsp % 0x10 != 0时打印一个double值,那么printf将会出现段错误。 看看我的代码(nasm语法): [bits 64] global _start extern printf extern pow section .data printf_format db '%lf', 10, 0 section .text _start: mov rbp, rsp sub rsp, MEM_VAL mov rax, 0x4000000000000000 mov qword [rsp], rax movsd xmm0, qword [rsp] mov rdi, printf_format mov rax, 1 call printf mov rax, 60 mov […]

在bash中redirectC程序输出的问题

我编写了一个程序在C中使用printf发送消息到标准输出,我有麻烦redirect到一个文件(从bash运行)的文件。 我试过了: ./program argument >> program.out ./program argument > program.out ./program >> program.out argument ./program > program.out argument 在每种情况下,都会创build文件program.out,但它仍为空。 执行结束后,文件大小为0。 如果我在执行程序时忽略了redirect: ./program argument 然后,使用printf发送到stdout的所有消息都显示在terminal中。 我有其他的C程序,我没有这样redirect输出的问题。 这是否与程序本身有关? 有争论传递? 哪里应该找问题? 关于C程序的一些细节: 它不会从标准input读取任何内容 它使用BSD Internet域套接字 它使用POSIX线程 它使用sigaction为SIGINT信号分配一个特殊的处理函数 它发送大量换行符到标准输出(对于那些你认为我应该冲洗) 一些代码: int main(int argc, char** argv) { printf("Execution started\n"); do { /* lots of printf here */ } while (1); […]

printf在程序出口处刷新

我很想知道程序退出时printf()函数的flush是如何工作的。 我们来看下面的代码: int main(int ac, char **av) { printf("Hi"); return 0; } 在这种情况下, printf()如何设法将其缓冲区刷新到stdout ? 我想这是平台依赖,所以让我们来看看Linux。 它可以使用gcc的__attribute__((dtor))但是标准库将依赖于编译器。 我认为这不是它的工作方式。 任何解释或文件链接表示赞赏。 谢谢。

向printf()添加换行符会改变代码的行为

出于某种原因,将\n添加到printf()改变以下代码的行为。 没有\n的代码会打印(null)而\n的代码会导致Segmentation fault 。 Printf.c #include <stdio.h> int main(int argc, char* argv[]){ printf("%s", argv[1]); } Printf.c – 输出 $ gcc -o Printf Printf.c $ ./Printf (null) Printf_Newline.c #include <stdio.h> int main(int argc, char* argv[]){ printf("%s\n", argv[1]); } Printf_Newline.c – 输出 $ gcc -o Printf_Newline Printf_Newline.c $ ./Printf_Newline Segmentation fault (core dumped) 我很好奇明白这背后的原因。

在assembly中使用printf会导致空的输出

我尝试从我的汇编代码中使用printf ,这是一个最简单的例子,它应该打印hello到stdout: .section .rodata hello: .ascii "hello\n\0" .section .text .globl _start _start: movq $hello, %rdi #first parameter xorl %eax, %eax #0 – number of used vector registers call printf #exit movq $60, %rax movq $0, %rdi syscall 我用它来构build它 gcc -nostdlib try_printf.s -o try_printf -lc 当我运行它,似乎工作:stringhello打印出来,退出状态是0 : XXX$ ./try_printf hello XXX$ echo $? 0 XXX$ 但是,当我尝试捕捉文本时,很明显,有些东西不能正常工作: […]

为什么printf()不输出这个整数作为浮点数?

我有这个代码: #include <stdio.h> int main() { int i = 12345; printf("%f", i); return 0; } printf()将输出0.000000,不应该printf()将i包含的位作为浮点数来解释?

有一个格式说明符,总是意味着string与_tprintf?

当您使用TCHAR支持在Windows上构build应用程序时, _tprintf() %s表示Ansi构build的char *string,Unicode构build的wchar_t *表示反向。 但有没有任何格式说明符总是指char *string,无论它是一个Ansi或Unicode编译? 因为即使是在Windows上,UTF-16也没有真正用于文件或者networking,所以无论你编译你的应用程序的本地字符types如何,你都会想要处理基于字节的string。