2015-05-07 2 views
-2
for (i = 0; temp[i] != ' '; ++i) 
{ 
    proizvod[i] = temp[i]; std::cout << proizvod[i]; 
} 
std::cout << "Proizvod:" << proizvod; 

Cout во второй строке ничего не делает и вначале он работает.can not cout string только char char

EDIT:

std::fstream f; 
std::string temp, proizvod, _cijena; 
double cijena; 
f.open(m_fileName); 
while (std::getline(f, temp)) 
{ 
    for (i = 0; temp[i] != ' '; ++i) 
    { 
     proizvod[i] = temp[i]; std::cout << proizvod[i]; 
    } 
    std::cout << "Proizvod:" << proizvod; 
+2

Пожалуйста, заполните [MCVE] (http://stackoverflow.com/help/mcve). – chris

+0

Что такое 'proizvod'? – NathanOliver

+0

И какой вход вы используете? Он содержит символы, отличные от ASCII? Имеет ли он пробел? –

ответ

1

Вы создаете пустую строку:

std::string proizvod; 

затем попытаться написать несуществующий элемент:

proizvod[i] = temp[i]; 

дает неопределенное поведение. Вы можете увеличить размер строки:

proizvod.push_back(temp[i]); 

или сделать что-то другое, чем ходьба через строку:

proizvod = temp.substr(0, temp.find(' ')); 
1

Ваш proizvod является std::string, однако вы в конечном итоге Мессинг его, так как вы добавляете элементов к нему в цикле без предварительной выделения памяти для него (помните, что string изначально пуст). Вы должны

proizvod.push_back(temp[i]); 

или использовать std::string конкатенацию operator+= как

proizvod += temp[i]; 

вместо этого.

0

Почему бы просто не сделать

for (i = 0; temp[i] != ' '; ++i) 
{ 
    proizvod[i] = temp[i]; 
    std::cout << "Proizvod:" << proizvod[i]; 
} 

с декларациями temp и proizvod быть char proizvod[] и char temp[]? Это должно быть проще понять, где размеры proizvod и temp - это ваш максимальный размер.

+0

Вы не можете объявить «динамический» массив подобным, 'char proizvod []': 'ошибка: размер хранилища 'proizvod' неизвестен'. Вам нужно указать его размер или инициализировать его из константы string. Ни одно из этих решений не очень привлекательно, так как вы не знаете заранее, сколько символов вы прочитаете из файла. Вот почему 'std :: string' - намного лучший выбор. – vsoftco

+0

@vsoftco Я не дал ему определенного размера, потому что я не знал максимального предела того, что требуется OP. Я предположил, что он мог понять это сам. Цель состоит в том, чтобы не создавать динамический массив, а статический массив (размер которого неизвестен вам или мне, поскольку мы не знаем максимальный размер того, что OP хочет сохранить). – Javia1492

+0

Вы должны уточнить, затем немного в вашем ответе. Единственная проблема, которую я вижу при таком подходе, заключается в том, что вы должны указать max. размер для массива, а также 'std :: getline' не будет работать с ним, вам нужно будет использовать' istream :: getline' вместо этого. – vsoftco

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