Проблемка с кодом
Пользователи, просматривающие топик: 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 возрващается не тем чем надо. Может кто-то увидит в чем проблема.
|
|
|
RE: Проблемка с кодом - 2010-08-03 16:04:57.123333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ты уверен, что ReadLine корректно всё читает? Какой прототип у функции md5? Зачем возвращать указатель на строку? Там конструктор копирования нормально работает. Зачем break; после return? P.S. посмотри тут
|
|
|
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 > 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 ?
|
|
|
RE: Проблемка с кодом - 2010-08-03 16:43:28.016666
|
|
|
Sрam
Сообщений: 2863
Оценки: 372
Присоединился: 2009-01-16 15:23:43.276666
|
Сори что влезаю, но по моему разницы не будет, так как и то и то потоки… _SaZ_ я правильно говорю?8|
|
|
|
RE: Проблемка с кодом - 2010-08-03 17:39:12.093333
|
|
|
Zmaster
Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
|
Я не пойму, зачем ты мешаешь Си и C++ в кучу? Не проще делать работу с файлами через файловые потоки? Зачем такое:
else{
continue;
Тут ветка else вообще не нужна. Если условие ложно, то выполнение и так перейдет к началу цикла. И зачем ты возвращаешь указатель на string? Возвращай string.
|
|
|
RE: Проблемка с кодом - 2010-08-03 18:30:13.640000
|
|
|
hromjo_forever
Сообщений: 119
Оценки: 0
Присоединился: 2010-08-02 12:45:32.986666
|
del.
|
|
|
RE: Проблемка с кодом - 2010-08-03 19:55:46.533333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Конец файла не проверяешь. Выше правильно написали: нафига мешать си и си++ в кучу. Это чревато последствиями. Выше я дал ссылку, как читать из потока ввода. Про сам поток написано тут. Почитай Страутструпа, там объясняется, как сделать так, чтобы не городить велосипеды. P.S. А вот что говорит гугл.
|
|
|
RE: Проблемка с кодом - 2010-08-03 20:15:07.110000
|
|
|
hromjo_forever
Сообщений: 119
Оценки: 0
Присоединился: 2010-08-02 12:45:32.986666
|
Спасибо. Я уже все переписал по всем вашим рекомендациям. Работает! А дохлого страуса и так читаю)
|
|
|
|
|