除非我通过data()或c_str()运行cout,否则无法将cout与C ++字符串一起使用

时间:2012-01-31 23:00:53

标签: c++ cout

在下面的程序中,当我尝试使用cout将C ++字符串输出到stdout时,我得到了这个 - 其他指令产生了预期的输出。我在Windows 7系统上使用MS Visual Studio 2010。

  

Lab1.exe中0x00dd4e89的第一次机会异常:0xC00000FD:堆栈   溢出。 Lab1.exe中0x00dd4e89处的未处理异常:0xC00000FD:   堆栈溢出。程序'[3740] Lab1.exe:Native'已退出   代码-1073741571(0xc00000fd)。

#include "StdAfx.h"
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <ostream>
#include <string>
#include <ctime>

//more code here

int main() {

int number = 1;
string myStr = "Hello, string!";
cout << "number: " << number << endl;
cout << "Hello, World!" << endl;
cout << myStr << endl;            //failing instruction

cout << "\nHit any key to continue...." << endl;
cin.get();

return 0;
}

我的导师建议更改失败的说明,使用data()c_str(),如下所示:

   cout << myStr.data() << endl;

我这样做了,这就解决了这个问题。他不知道为什么,只是说它有效,所以不用担心。

在我看来,像cout这样的C ++ ostream对象应该能够处理C ++字符串。我错过了什么,或者我真的需要data()使用c_str()cout吗?

我还尝试使用std::coutstd::stringstd::endl - 它没有帮助。

提前感谢您的建议;我真的很想知道这里发生了什么。

海伦

3 个答案:

答案 0 :(得分:3)

您应该包含string而不是string.h

#include <string>

答案 1 :(得分:3)

我怀疑cout << myStr << endl;是一个麻烦的路线。

此代码可以正常工作:

#include <iostream>
#include <string>
using namespace std;

int main(void)
{
    string s("Hello World!");
    cout << s << endl;
    return 0;
}

答案 2 :(得分:3)

错误消息表明您有堆栈溢出:似乎某些函数正在递归调用。您没有为string定义自己的输出函数吗? “更多代码在这里”可能与输出运算符有什么关系?