c - printf的实现

标签 c string printf

<分区>

谁能给我解释一下 printf 的哪个实现可以正确打印字符串?

版本 1:

printf(const char * s) {
     while(*s != '\0') {
          write(s, 1, f);
          s++;
     }
}

版本 2:

printf(const char *s) {
     write(s, strlen(s), f);
}

最佳答案

两者都打印“正确的字符串”。他们甚至在参数中正确打印给定的字符串。

如果您的问题是什么是更好的实现,我建议这在很大程度上取决于 write 的实现。

如果写入调用有足够大的开销或者可以在提交写入之前缓冲所有字符,则选项 1 会更慢。

如果写入非常未优化,选项 2 会更慢。例如,它只是将一个字符一个字符地放在串行连接上。在这里,您需要为使用 strlen 的字符串的额外迭代付费。

请注意,写入调用将文件描述符作为第一个参数,而不是最后一个。

关于c - printf的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35061471/

相关文章:

C中的字符数组和字符串终止符

c - 使用 C 在终端运行的应用程序中打印旋转光标

c++ - 您如何使用 WinHTTP 通过自签名证书执行 SSL

java - 从字符串中删除某些字符

c - 使用尺寸 8 Valgrind 的未初始化值

python - 在保留列表结构的同时删除列中的列表类型

php - 字符串函数在 PHP 中是 ASCII 安全的吗?

C 编程 - 整数值打印不正确

c - 如何使用 g_signal_handlers_block_by_func()

c - 宏定义的未定义错误