printf的实现

时间:2016-01-28 12:27:04

标签: 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);
}

1 个答案:

答案 0 :(得分:3)

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

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

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

如果写入非常不优化,则选项2会更慢。例如,它只是逐个字符地放在串行连接上。在这里,您需要为strlen支付额外的字符串迭代次数。

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