Невозможно использовать cout со строкой C ++, если я не запускаю ее через data () или c_str () - PullRequest
2 голосов
/ 01 февраля 2012

В следующей программе я получаю это, когда пытаюсь использовать cout для вывода строки C ++ в stdout - другие инструкции дают ожидаемый результат.Я использую MS Visual Studio 2010 в системе Windows 7.

Исключение первого шанса при 0x00dd4e89 в Lab1.exe: 0xC00000FD: переполнение стека.Необработанное исключение в 0x00dd4e89 в Lab1.exe: 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;

Я сделал это, и это решило проблему.Он не знал почему, просто сказал, что это сработало, так что не стоит об этом беспокоиться.

Мне кажется, что объект C ++ ostream, такой как cout, должен уметь обрабатывать строку C ++.Я что-то упустил, или мне действительно нужно использовать data() или c_str() с cout?

Я также пытался использовать std::cout, std::string и std::endl - это не такt help.

Заранее спасибо за совет;Я действительно хочу понять, что здесь происходит.

Хелен

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

Я сомневаюсь, что cout << myStr << endl; была неприятной чертой.

Этот код отлично работает:

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

int main(void)
{
    string s("Hello World!");
    cout << s << endl;
    return 0;
}
3 голосов
/ 01 февраля 2012

Сообщение об ошибке указывает на переполнение стека: кажется, что какая-то функция вызывается рекурсивно.Вы случайно не определили свою собственную функцию вывода для string?Что находится в «больше кода здесь», что может быть связано с операторами вывода?

3 голосов
/ 01 февраля 2012

Вы должны включить string вместо string.h:

#include <string>
...