c - 使用多个 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);
解决方案
stdio 流的属性之一,尤其是在连接到文件时,是它们缓冲输入和输出,然后将其写入大块。因此,除非您干扰了 的缓冲,否则您会fp
自动从方法 1 获得类似于方法 2 的 I/O 行为。
此外,您可以通过 控制缓冲区的大小setvbuf()
,因此如果您想要一个 10000 字节的缓冲区,那么您可以确保,允许使用 I/O 语义的方法 1 解决方案更类似于您的方法 2。除非您想要连接字符串不仅仅是打印它,当方法 1 可行时,几乎没有理由更喜欢方法 2。
推荐阅读
- c - llvm 未定义的实验内在函数
- javascript - 使用 Axios 过滤 response.data 的 API 调用
- javascript - Vue 反应性,防止在使用输入 v-model 更新道具时重新渲染组件
- javascript - 我正在尝试使用 jimp 在我的 dicrod bo 上放置一个经过处理的图像来欢迎人们
- git - 来自 git diff --word-diff 的意外输出。它是一个错误吗?
- python - 元组到 Pandas 数据框
- python - 如何在 Python 中的 Log X 轴上绘制 2 条线?
- css - 需要一个标识符,但看到的是“<”。React.js 项目
- microsoft-teams - Microsoft Teams 连接器无法保存配置
- python - 使用 Tweepy 阻止多个用户?