首页 > 解决方案 > 使用多个 fprintf 语句将多行写入文件与 con-cat 多行然后使用一个 fprintf 语句写入文件?

问题描述

我的应用程序(用 C 编写)必须将 500 个字符串出列并将它们写入文本文件。我可以使每个字符串出队并使用单独的fprintf语句将每个字符串写入文件,或者我可以将所有出队的字符串连接成一个字符串,然后用单个fprintf语句将该长连接字符串写入文件。哪种方法更好?

方法一:

i = 0;
while (i < 500)
{
    memset(cdr_info, 0, sizeof(cdr_info));
    de_cdrQueue(cdr_info);
    fprintf(fp, "%s\n", cdr_info);
    i++;
}

方法二:

char cdr[10000];
i = 0;
while (i < 500)
{
    memset(cdr_info, 0, sizeof(cdr_info));
    de_cdrQueue(cdr_info);
    strcat(cdr,"\n");
    strcat(cdr, cdr_info);
    i++;
}
fprintf(fp, "%s\n", cdr_info);

标签: clinux

解决方案


stdio 流的属性之一,尤其是在连接到文件时,是它们缓冲输入和输出,然后将其写入大块。因此,除非您干扰了 的缓冲,否则您会fp自动方法 1 获得类似于方法 2 的 I/O 行为。

此外,您可以通过 控制缓冲区的大小setvbuf(),因此如果您想要一个 10000 字节的缓冲区,那么您可以确保,允许使用 I/O 语义的方法 1 解决方案更类似于您的方法 2。除非您想要连接字符串不仅仅是打印它,当方法 1 可行时,几乎没有理由更喜欢方法 2。


推荐阅读