在下面的程序中,当我尝试使用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::cout
,std::string
和std::endl
- 它没有帮助。
提前感谢您的建议;我真的很想知道这里发生了什么。
海伦
答案 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
定义自己的输出函数吗? “更多代码在这里”可能与输出运算符有什么关系?