首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用cout、printf或put()打印内容

不使用cout、printf或put()打印内容
EN

Stack Overflow用户
提问于 2012-12-04 01:26:55
回答 5查看 18.9K关注 0票数 3

我学到了

代码语言:javascript
运行
复制
inline ostream & _Cdecl ostream::operator<< (const signed char * _s) {
    outstr(_s, (const signed char *)0);
    return *this;
}

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

我试过了

代码语言:javascript
运行
复制
#include<iostream.h>
int main() {
    outstr("Hello world!", (const signed char *)0);
    return 0;
}

它最终以错误告终。我想使用这样的东西,看看是否有一些可能的方法来回答这个在屏幕上打印东西而不使用printf,cout或put()的问题。

更新:如果您有任何其他建议,我将非常欢迎

代码语言:javascript
运行
复制
#include<stdlib.h>
void main() {
    system("echo /"Hello world!/"");
}

注意:如果你能提供不需要printf()、cout或put()就能打印的C等价代码,我就没有限制了。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-04 02:08:18

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

代码语言:javascript
运行
复制
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,但从用户的角度来看,这通常是相同的位置:

代码语言:javascript
运行
复制
std::cerr << str;
std::clog << str;

从效率的角度来看,我怀疑这些都不会对你有帮助。为此,您可能希望查看更多特定于平台的内容。对于POSIX系统,请参阅Dave S给出的答案。对于Windows,请参阅this link

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

票数 3
EN

Stack Overflow用户

发布于 2012-12-04 01:30:51

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

票数 4
EN

Stack Overflow用户

发布于 2012-12-04 01:32:43

进行函数调用所需的时间比打印字符串所需的时间要短得多。您可以(通常也应该)忽略使用您的方法可以节省的时间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13688534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档