1

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

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

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

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

这正是我需要的。

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

mov data, EDX

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

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

4

4 回答 4

4

如果指向字符串的指针为空,则所有后续对 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";
于 2015-02-03T17:03:13.197 回答
1

这两个函数调用是不等价的,因为\nprintf刷新流。尝试:

cout << data << endl;
于 2012-06-23T22:22:01.057 回答
0

简而言之

如果你不在结尾处加上换行符,你会遇到cout的问题!

详细地

尝试将 an 添加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 (回车)将光标放在行的第一个位置(不换行)
  • 如果您在之前写的行中写了较短的文本,请确保在末尾用空格字符覆盖它

在过程中的某处输出:

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!
于 2014-11-28T10:52:19.857 回答
0

确定你用过

#include <string>

在你的文件头中。有了这个,你应该可以使用

std::cout << data << endl;

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

于 2012-06-23T23:36:37.060 回答