【问题标题】:printf not print string after \n (Compiler GCC)\n 之后 printf 不打印字符串(编译器 GCC)
【发布时间】:2018-10-30 09:45:59
【问题描述】:

查看我的代码

char t[]= "{\n abcdeffgjejgjergnjkengkknkn \n";
printf("%s",t);

char t1[]= "{ abcdeffgjejgjergnjkengkknkn \n aaffdefa";
printf("%s",t1);

实际输出

{
{ abcdeffgjejgjergnjkengkknkn

预期输出:

{
 abcdeffgjejgjergnjkengkknkn 
{ abcdeffgjejgjergnjkengkknkn 
 aaffdefa

谁能帮助我为什么字符串在 \n (LF) 之后没有被打印?

编译器 - arm-none-eabi

库头 - Newlib

IDE:MCUExpresso

【问题讨论】:

    标签: gcc printf printf-debugging


    【解决方案1】:

    默认情况下stdoutprintf 写入的位置)是行缓冲。这意味着当输出缓冲区已满或打印换行符时会刷新(实际写入)输出缓冲区。

    这就是为什么不打印输出的第二部分的原因,因为它不足以填充缓冲区并且您没有换行符来刷新缓冲区。

    您可以通过调用fflush 来明确自己刷新:

    printf(...);
    fflush(stdout);
    

    【讨论】:

    • 但同样适用于其他编译器(Keil 的 ARM)?你有 fflush 的参考代码吗?
    • @jtro 是的,打印一个尾随换行符或显式调用fflush
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多