cout没有输出,但printf确实如此

时间:2012-06-23 22:17:53

标签: c++ assembly printf cout

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

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

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

printf("%s \n", data);

这显示了我的需要。

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

mov data, EDX

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

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

4 个答案:

答案 0 :(得分:3)

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

 const char* s=0;
 cout << "shown on cout\n";
 cout << "not shown" << s << "not shown either\n";
 cout << "by bye cout, not shown\n";

答案 1 :(得分:1)

两个函数调用不等效,因为\n处的printf会刷新流。试试:

cout << data << endl;

答案 2 :(得分:0)

请务必使用

#include <string>

在您的文件标题中。有了这个,您应该可以使用

std::cout << data << endl;

没有问题。如果你正在为std使用全局命名空间,你可能不需要std ::,但是无论如何我都会把它放在帮助你更快地调试它并消除它作为一个可能的问题。

答案 3 :(得分:0)

简而言之

cout 会遇到问题,如果你没有把换行符放在最后

详细信息

尝试将endl添加到cout(例如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 \ n(回车)将光标放到线的第一个位置(没有换行符)
  • 如果您在先前写过的行中写短文,请确保在末尾用空格字符覆盖它

输出过程中的某个地方:

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!