2012-01-31 2 views
2

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

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

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

Helen

+3

Вам нужны 'std :: string',' std :: cout' и 'std :: endl', если в' // больше кода здесь нет чего-либо или какой-либо из ваших файлов заголовков, которые вы нам не показываете. –

+3

Опубликовать соответствующий код. Кусок, который вы отправили, не содержит вашей ошибки. Попробуйте сузить его до автономного минимального примера. –

+0

Что находится в разделе «больше кода»? Я подозреваю, что это важно. –

ответ

3

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

#include <string> 
+3

Похоже, у нее уже есть и '' * и * '' '' '' '' 'должно идти конечно. –

+0

Почему downvote? –

+0

Я бы предположил, что любой нисходящий (я не вижу здесь в данный момент) был потому, что это не очень полезный ответ - '' уже включен. –

3

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

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

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

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

Почему downvote? –

+0

Я забыл упомянуть, что у меня было «использование пространства имен std;» –

3

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

+2

Почему downvote? –

+0

Я подозреваю, что это связано с указанием в правильном направлении ;-) Другие описания проблем просто выглядят намного проще. Добавляя комментарий: если код в файле не определяет забавный оператор вывода, возможно, «stdafx.h» делает: это тоже локальный заголовок. –

 Смежные вопросы

  • Нет связанных вопросов^_^