0

我相信我的问题源于printf打印缓冲区,但我对 C 或缓冲区知之甚少,不知道如何处理这个问题。我编写了一个简单的程序,它只是根据输入的文件根据一些if/语句打印一堆文本(字符/字符串) 。else如果我像这样从 Unix shell 调用它:

gcc -o myProgram myProgram.c
./myProgram fileName

它将仅在第一次运行时正确打印。如果我重复这些步骤并再次运行程序,它会在 output 之间打印出一堆“bash”命令printf。有没有简单的方法来调试或修复这个问题?我对 C 很陌生,如果你不知道的话,我把它作为学校作业的一部分,所以我试图真正弄清楚这一点并理解这个概念,这样我就可以将它应用回我的实际计划任务。

编辑:这是一个尝试演示我的问题的临时示例
注意:输入的文件只包含文本。

#include <stdio.h>
#include <stdlib.h>

struct S{
    char word[30];
}s;

int main(int argc, char ** argv)
{
    void print(struct S *s);
    int i; 
    FILE *f = fopen(argv[1], "rb");
    fseek(f, 0, SEEK_SET);
    fread(&s, sizeof(s), 1, f);
    print(&s);
    fclose(f);
}

void print(struct S *s)
{
    int i = 0;
    printf("Word: ");
    for(i = 0; i < 30; i++)
    {
        if(s->word[i] != '\0')
        {
            printf("%c", s->word[i]);
        }       
        else
        {
            break;
        }
    }
    printf("\n");
}
4

1 回答 1

4

你可以测试一下:

在 main() 的第一行添加以下行:

setbuf( stdout , NULL );

程序的输出存储在缓冲区中,当您调用 printf 时,它们会被提取。setbuf() 方法用于处理该缓冲区。当您添加 setbuf(stdout , NULL) 时,这会告诉缓冲区不存储输出并将程序的输出直接发送到标准输出。

于 2012-09-19T04:18:59.173 回答