在不使用 cout、printf 或 puts() 的情况下打印内容

新手上路,请多包涵

我已经了解到

inline ostream & _Cdecl ostream::operator<< (const signed char * _s) {
    outstr(_s, (const signed char *)0);
    return *this;
}

是如何在 iostream.h 头文件中声明(重载)插入运算符 (<<)。我可以使用相同的函数在屏幕上打印字符串值吗?

我试过了

#include<iostream.h>
int main() {
    outstr("Hello world!", (const signed char *)0);
    return 0;
}

结果出错了。我想使用这样的东西来看看是否有一些可能的方法来回答这个在屏幕上打印某些东西的查询,而不使用 printf、cout 或 puts()。

更新:如果您有任何建议,我会很欢迎

#include<stdlib.h>
void main() {
    system("echo /"Hello world!/"");
}

注意:如果您可以提供无需 printf()、cout 或 puts() 即可打印的 C 等效代码,我没有任何限制

原文由 Praveen Vinny 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 792
2 个回答

如果您希望在所有符合标准的 C++ 实现中具有可移植性,您可以通过以下方式将字符串打印到标准输出

const char * str = "Hello World\n";
fprintf(stdout, str);
fputs(str, stdout);
for (int i=0; str[i]!=0; ++i)
    putchar(str[i]);
for (int i=0; str[i]!=0; ++i)
    putc(str[i], stdout);
for (int i=0; str[i]!=0; ++i)
    fputc(str[i], stdout);
fwrite(str, sizeof(*str), strlen(str), stdout);

此外,您可以使用 std::cerrstd::clog 。他们写信给 stderr 而不是 stdout ,但从用户的角度来看,这通常是同一个地方:

 std::cerr << str;
std::clog << str;

从效率的角度来看,我怀疑这些中的任何一个都会对您有所帮助。为此,您可能希望查看一些更特定于平台的东西。对于 POSIX 系统,请参阅 Dave S 给出的答案。对于 Windows,请参阅 此链接

你不应该做的是打开你的头文件并模仿他们使用的东西。至少,不是在中间级别,他们在自己的实现中使用不同的各种晦涩功能。这些功能在下一个版本中可能不存在。但是,如果您深入到最深层次,您会发现操作系统特定的调用,就像我上面提供的链接中的调用一样。只要您使用相同的操作系统,甚至在操作系统版本之间,这些都应该是安全的。

原文由 Benjamin Lindley 发布,翻译遵循 CC BY-SA 3.0 许可协议

是的,您可以直接调用该函数,但是您这样做的理由是有缺陷的。与执行实际功能所花费的时间相比,通过消除对操作员的子程序调用所节省的时间可以忽略不计;这就像在活动车顶关闭时关闭车窗以减少雨水一样。

原文由 mah 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题