Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблемка с кодом

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблемка с кодом
Имя
Сообщение << Старые топики   Новые топики >>
Проблемка с кодом - 2010-08-03 15:25:55.820000   
hromjo_forever

Сообщений: 119
Оценки: 0
Присоединился: 2010-08-02 12:45:32.986666
Проблема в том что при сравнивание объект типа string становится равным 0 или вобще все данные из него исчезают.
Вот код:
quote:


std::string line;

std::string *wbfunc(std::string &hash)
{
bool isError;
FILE *fl = fopen("/home/hromjo/d", "r");
while (ReadLine(fl, line, isError))
{
if(md5(line) == hash)
{
return &line;
break;
}else{
continue;
}
}


Функция md5() и ReadLine() работает исправно, но как ни странно line возрващается не тем чем надо. Может кто-то увидит в чем проблема.
Post #: 1
RE: Проблемка с кодом - 2010-08-03 16:04:57.123333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ты уверен, что ReadLine корректно всё читает?
Какой прототип у функции md5?
Зачем возвращать указатель на строку? Там конструктор копирования нормально работает.
Зачем break; после return?

P.S. посмотри тут
Post #: 2
RE: Проблемка с кодом - 2010-08-03 16:36:31.146666   
hromjo_forever

Сообщений: 119
Оценки: 0
Присоединился: 2010-08-02 12:45:32.986666
ReadLine:
const size_t readBlockSize = 4096; bool ReadLine(FILE* fl, std::string& line, bool& isError) { char buf[readBlockSize]; line.erase(); bool isFirst = true; while (fgets(buf, sizeof buf, fl)) { isFirst = false; line.append(buf); std::string::size_type sz = line.size(); if (sz &gt; 0 && line[sz - 1] != '\n') { // Incomplete line, continue reading continue; } break; } isError = ferror(fl) ? true : false; if (isFirst) // nothing left to read return false; return true; } Прототип std::string md5(const std::string str)

по твоей ссылке дается код, который получает данные из потока cin. А возможно его заменить на fstream ?
Post #: 3
RE: Проблемка с кодом - 2010-08-03 16:43:28.016666   
Sрam

Сообщений: 2863
Оценки: 372
Присоединился: 2009-01-16 15:23:43.276666
Сори что влезаю, но по моему разницы не будет, так как и то и то потоки…
_SaZ_ я правильно говорю?8|
Post #: 4
RE: Проблемка с кодом - 2010-08-03 17:39:12.093333   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
Я не пойму, зачем ты мешаешь Си и C++ в кучу? Не проще делать работу с файлами через файловые потоки? Зачем такое:
else{ continue; Тут ветка else вообще не нужна. Если условие ложно, то выполнение и так перейдет к началу цикла. И зачем ты возвращаешь указатель на string? Возвращай string.
Post #: 5
RE: Проблемка с кодом - 2010-08-03 18:30:13.640000   
hromjo_forever

Сообщений: 119
Оценки: 0
Присоединился: 2010-08-02 12:45:32.986666
del.
Post #: 6
RE: Проблемка с кодом - 2010-08-03 19:55:46.533333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Конец файла не проверяешь. Выше правильно написали: нафига мешать си и си++ в кучу. Это чревато последствиями.

Выше я дал ссылку, как читать из потока ввода. Про сам поток написано тут. Почитай Страутструпа, там объясняется, как сделать так, чтобы не городить велосипеды.

P.S. А вот что говорит гугл.
Post #: 7
RE: Проблемка с кодом - 2010-08-03 20:15:07.110000   
hromjo_forever

Сообщений: 119
Оценки: 0
Присоединился: 2010-08-02 12:45:32.986666
Спасибо. Я уже все переписал по всем вашим рекомендациям. Работает!
А дохлого страуса и так читаю)
Post #: 8
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблемка с кодом







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.