cout 没有输出,但 printf 有

cout no output but printf does

本文关键字:printf 输出 cout      更新时间:2023-10-16

我对C++编程很陌生,但我正在尝试编写一些代码,从字符串中过滤特定单词,然后执行特定操作。由于某种原因,代码看不到字符串中的文本。

printf("%s n", data.c_str());
cout << data;

这绝对没有显示任何内容 - 这意味着我无法使用.find或将其写入文件。

printf("%s n", data);

这恰恰显示了我需要什么。

我正在使用汇编将代码写入数据:

mov data, EDX

为什么我只能使用最后一种方法?

编辑:数据启动方式为: std::string data;

如果指向字符串的指针为 null,则所有后续调用 cout停止工作

 const char* s=0;
 cout << "shown on coutn";
 cout << "not shown" << s << "not shown eithern";
 cout << "by bye cout, not shownn";

这两个函数调用并不等效,因为n at printf刷新流。尝试:

cout << data << endl;

确保你使用了

#include <string>

在您的文件头中。有了这个,你应该能够使用

std::cout << data << endl;

没有问题。如果您为 std 使用全局命名空间,您可能不需要 std::,但无论如何我都会使用它来帮助您更快地调试它并消除它可能出现的问题。

简而言之

如果你不在其末尾放置换行符,您将遇到cout问题!

详细地

尝试在cout中添加endl(例如 std::cout << data << std::endl ),或使用以下说明激活 cout 的"立即输出"(无需先换行)。

std::cout << std::unitbuf;

完整示例:

std::cout << std::unitbuf;
std::cout << data; 
// ... a lot of code later ...
std::cout << "it still works";

旁注:这与输出缓冲有关,正如名称unitbuf所暗示的那样(如果您想查找此处真正发生的事情)。

这样也可以重写当前行,这是一个很好的例子,你需要这个;-)

实例

using namespace std;
cout << "I'm about to calculate some great stuff!" << endl;
cout << unitbuf;
for (int x=0; x<=100; x++)
{
    cout << "r" << x << " percent finished!";
    // Calculate great stuff here
    // ...
    sleep(100);  // or just pretend, and rest a little ;-)
}
cout << endl << "Finished calculating awesome stuff!" << endl;

言论:

  • \r(回车符)将光标置于行的第一个位置(不带换行符)
  • 如果在以前编写的行中写入较短的文本,请确保在末尾使用空格字符覆盖它

在流程中的某处输出:

I'm about to calculate some great stuff!
45 percent finished!

.. 过了一段时间:

I'm about to calculate some great stuff!
100 percent finished!
Finished calculating awesome stuff!