Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    Strelok92



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SaDFromSpb
    Блин в том - то и дело что это лицензия!!!!Народ,скажите что может вызвать такую ошибку,вы ж такие умные!!!Тока обще понятным языком.Нормально прошу!

    Всего записей: 15 | Зарегистр. 20-01-2007 | Отправлено: 16:56 21-01-2007
    blackdevil

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Тебе не в этот форум.Тут програмиисты собрались.Они коды программ разбирают и о языке программирования рассуждают.Откуда им знать почему твоя игрушка вылетает???И изменить ты тут ничего не сможешь.Переставь игрушку или операционку на худой конец...тут к сожалению тебе не смогут помочь.

    Всего записей: 216 | Зарегистр. 14-04-2006 | Отправлено: 17:21 21-01-2007
    Strelok92



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну хорошо,господа программисты,скажите пожалуйста чем вызвана такая ошибка.Вы же должны это знать!

    Всего записей: 15 | Зарегистр. 20-01-2007 | Отправлено: 17:23 21-01-2007
    rain87



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Strelok92
    выдам 1083й дежурный ответ суппорта:
    При бета-тестировании никаких проблем обнаружено не было. Налицо аппаратная несовместимость
    Доволен?
    а если хочешь чего-нибуь
    Цитата:
    Тока обще понятным языком
    то иди в ту тему, которую я указал, ищи, спрашивай, етс

    Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 17:54 21-01-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Strelok92

    Цитата:
    Ё - моё,послушайте,харе ржать в конце концов!!!

    да как тут не ржать-то, если ты с такой уверенностью заявляешь, что уже во всем разобрался и дело действительно в С++. и в то ж время говоришь, что в С++ и программировании ты не шаришь. Тебе самому-то не смешно? Причем тут вообще С++ к уже готовому написанному кем-то приложению, если у тебя исходных кодов оного нет и быть не может? Или ты собрался его декомпилировать/дизассемблировать, и полазить по исходным кодам (причем уже на ассемблере) и найти и устранить ошибку? Тогда тебе в ветку по ассемблеру и диззассемблерам
    А если серьезно - SaDFromSpb правильно сказал

    Цитата:
    Купи лицензию! И не мешай людям на философские темы глагольствовать!

     
    Qraizer
    WiseAlex
    Спасибо, с бустом до этого сталкиваться не приходилось. Сейчас глянул на сайт буст.орг - там какие-то заморочки с лицензией, которых у них 2: одна для персонального использования, бесплатная, а другая для коммерческого - платная. А для персонального это как, кто-нибудь может объяснить? Это для тех людей, которые балуются программированием и пишут чисто для себя всякие кросс-платформенные утилитки (хотел бы я на таких посмотреть)? А если я пишу продукт под заказ - то это уже коммерческую покупать надо?

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 18:00 21-01-2007 | Исправлено: xdude, 18:04 21-01-2007
    Strelok92



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    xdude
    Я говорю что разобрался что дело в С++ потому что я отформотировал хард где игруля сидела,переустановил и та же хня.Ну а в чём ещё

    Всего записей: 15 | Зарегистр. 20-01-2007 | Отправлено: 18:21 21-01-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Strelok92

    Цитата:
    отформотировал хард где игруля сидела,переустановил и та же хня

    Никогда бы не подумал, что это есть критерий выявления проблемы

    Цитата:
    Ну а в чём ещё  

    Блин, да ты не в тот топик пишешь! Ну раз ты такой настойчивый - скажу: либо в драйверах дело, либо в системе, либо в самой игре. Попробуй переустановить винду, поставить последние версии дров и DirectX, потом игрулину установить. Если не поможет - выкидывай свои диски с игрой и покупай другую версию.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 18:46 21-01-2007
    Strelok92



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    xdude
    Спасибо,сразу бы так!

    Всего записей: 15 | Зарегистр. 20-01-2007 | Отправлено: 18:55 21-01-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи, у меня такой вопрос по STL:
    Есть некий буффер, скажем char buf[512];
    В этот буфер я получаю строку из сокета (протокол POP3, хотя это и не важно), причем строка определенного формата.
    Далее мне эту строку надо пропарсить. Например. строка может быть такая:
    +OK 234 12 bla-bla-bla bla-bla bla
    Мне нужно разбить ее на части, чтобы получилось 3 строки: "+OK", "234", "12" и "bla-bla-bla bla-bla bla".
    Для этого я хочу использовать istringstream is(buf). Получается что-то типа того:

    Код:
     
    char buf[512];
    int len=recv(sock,buf,sizeof(buf),0);
    buf[len]='\0';
    istringstream is(buf);
    string status; // будет содержать "+OK"
    int num1; // будет содержать 234
    int num2; // будет содержать 12
    string rest; // будет содержать "bla-bla-bla bla-bla bla"
    is >> status >> num1 >> num2;
    getline(is,rest);
     

     
    Однако, насколько я понимаю, при инициализации is(buf) содержимое буфера buf дублируется (копирутся) во внутренний буфер строки std::string, которая создается так как в конструкторе istringstream(const string &s) прописан именно этот тип, а не const char* s. Так вот, вопрос знатокам: можно ли как-то избежать дублирования этого буфера? Это ж получается, что при каждом ответе сервера мне нужно будет парсить этот ответ, и каждый раз все содержимое буфера будет дублироваться конструктором istringstream. Неэффективно, однако. Или, может, кто-то посоветует более эффективный способ обработки этих ответов? Заранее спасибо.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 21:53 21-01-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И еще один вопросик назрел: чем отличаются map и hash_map, и почему hash_map не соответствует стандарту ISO и перенесен в пространство имен stdext?
     
    Добавлено:
    О, и в чем еще отличие list от vector, и что в каком случае предпочтительней использовать?
     
    Добавлено:

    Цитата:
    в чем еще отличие list от vector

    Уже нашёл а вот предыдущие вопросы в силе.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 00:31 22-01-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    xdude

    Цитата:
    там какие-то заморочки с лицензией,

    http://boost.org/LICENSE_1_0.txt - и какие здесь заморочки?  
    Насколько я помню в boost есть только платная поддержка каких-то третьих фирм все остальное бесплатно

    Цитата:
    Далее мне эту строку надо пропарсить. Например. строка может быть такая:
    +OK 234 12 bla-bla-bla bla-bla bla  

    если тебе критична производительность, то stringstream лучше вообще не использовать - есть печальный опыт.
    можно использовать стандартную библиотеку С - strtok например  

    Цитата:
    чем отличаются map и hash_map, и почему hash_map не соответствует стандарту ISO

    в hash_map ключ хэшируется, что удобно если ключ строка или что-то в этом духе  
    по стандарту у страуструпа написано. Когда принимали стандарт по hash_map договориться не смогли и чтобы не тянуть время с принятием стандарта hash_map в стандарт не включили

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 11:56 22-01-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Не совсем так. hash_map не попал в стандарт по причине того, что предложение о включении в стандарт хеширующих контейнеров поступило слишком поздно. В это время приём предложений был уже прекращён. Иначе бы стандарт никогда не вышел, наверное.
    xdude
    Более эффективный путь - это использование устаревшего с точки зрения стандарта istrstring. Но он не такой внятный, как istringstream. Последний использует копию буфера вполне обоснованно. Все классы потоков используют собственный буфер. Кроме istrstring, и то не всегда. В условиях мультитридности это в общем случае единственный способ гарантировать владение собственным буфером.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 12:30 22-01-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex

    Цитата:
    и какие здесь заморочки?

    Да, действительно, протупил.

    Цитата:
    The Boost license encourages both commercial and non-commercial use.

    Насчет стрингстрима:

    Цитата:
    можно использовать стандартную библиотеку С - strtok например

    На сайте того же boost-а говорится, что strtok является потенциально опасной при использовании в мультипоточном приложении:

    Цитата:
    Certain C++ Standard Library functions inherited from C are particular problems because they hold internal state between calls: rand strtok asctime ctime gmtime localtime

    Блин, а у меня сплошь и рядом в этом приложении встречаются перечисленные функции. Причем предлагается использовать бустовские заменители этих функций, обеспечивающие thread-safety. У них есть random number generator и tokenizer library. А как же быть с gmtime/localtime и иже с ними? И можно ли доверять их генератору случайных чисел? Не будет с ним глюков?
     
    Добавлено:
    Qraizer
    istrstring действительно устарел, и MSDN, например, не советует его использовать. Наверное попробую-таки tokenizer от буста, хотя раньше вообще даже с функцией strtok не сталкивался.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 19:46 22-01-2007
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    О, блин, сколько я тут интересного пропустил...
    xdude

    Цитата:
    О, и в чем еще отличие list от vector, и что в каком случае предпочтительней использовать?  

    Практически, по определению, list - двухсвязный список, vector - обычный (почти) массив - индексированный. Соответственно, прямой доступ к списку имеет порядок n, прямой доступ к вектору  - порядок 1. С другой стороны, исключение элемента из списка - порядок 1, из вектора - не уверен, что возможно.
    WiseAlex
    strtok точно лучше не использовать. У нее один внутренний буфер на все потоки - задолбаешься разруливать его. Правда, если поставить мьютекс, можно и ей работать.
    xdude
    Про токенайзер - не знаю, не работал, но вот думаю, что можно это сделать в т.ч. и регулярными выражениями из того же буста.

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 09:42 23-01-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Друзья-программеры, есть ещё один вопрос: что происходит при таком вот раскладе:

    Код:
     
    std::string str1;
    std::string str2;
    ...
    str2=str1.substr(1,5);
     

    Насколько я понимаю, создается временная переменная типа std::string, со своим буфером, в который копируется кусок строки str1, и функция substr() возвращает эту переменную, а потом в результате операции присваивания str2 копирует данные из буфера временной переменной в свой буфер, и затем временная переменная уничтожается. А есть ли способ избежать создания временных переменных?
    Или я ошибаюсь, и str2 копирует подстроку без всякой временной переменной прямо из буфера строки str1?

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 20:29 23-01-2007 | Исправлено: xdude, 20:30 23-01-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.
     
    Извеняюсь за долгое отсутсвие и сразу перехожу к делу.
     
    TeXpert
    Увы, у меня просто нет возможности продолжить дискусию на даную тему. (Думаю не стоит писать о чём я?).
     
    Вопросы:
    1. В первые месяцы после начала изучения С++, передомной вставала проблема: в какие ковычки предворять имена заглавочных файлов. Сообственно эту проблему я решил методом научного тыка, просто пробуя всё подряд. Теперь думаю к проблеме надо вернуться. Ведь надо же понять что есть что! И так сам вопрос для чего используют обычные ковычки (" ") и для чего нужны необычные ковычки (< >)?
    2. Можно начать с отступления? Есть у моего провайдера локалка, порядком заляпаная некими кулхацкерами (Я не ошибся с выроженим?). Так вот, появилось у меня желание поговорить с этими самыми персонами, что называеться с глазу на глаз. То есть просканит он мои порты, к примеру, а я ему качаю свой *.txt (15 штук на рабочий стол, чтоб не проворонил) где пишу что "побаловался и хватит", и ссылку на двух битовый номер в троичной системе счисления. Ну а теперь вопрос! Что мне нужно для реализации этого примера? Точнее, что мне надо изучить, какая литература, справочники могут потребоваться?

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 22:03 23-01-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    xdude
    Он устарел в том смысле, что является менее удобным и безопасным. Все "форматирующие в памяти" потоки были перенесены с char[] на std::basic_string<>-и и получились std:: (i/o)stringstream<>-ы, которые и рекомендуются к использованию. Так как интерфейс этих новых классов претерпел немного более существенные изменения, чем другие классы потоков (которые сохранили совместимость со старым кодом, благодаря соответствующим typedef-ам), то их и переименовали. Однако старые классы оставили (и не рекомендуют ими пользоваться) для совместимости. Я не думаю, что эти классы когда-нибудь уберут. Слишком уж много кода написано с их использованием.
    Тем не менее, они безусловно правы, когда не советуют ими пользоваться, ибо помимо производительности и совместимости имеются и другие критерии выбора. И мне кажется, что новые возможности, включая поддержку локалей и автоматическое слежение за своим стораджем, гораздо чаще являются более сильным аргументом. И только при действительной необходимости имеет смысл использовать старые классы.
    Насчёт "нерекомендованных" функций - так эта проблема решена в мультитридных библиотеках. Т.е. если ты используешь такие библиотеки - эти функции имеют по отдельному буферу на каждую нитку. Во всяком случае, так поступают MS и Borland, если новые нитки создаются не API-функцией CreateThread(), а библиотечной же какой-нибудь _beginthread().
    Ты прав в своих опасениях насчёт substr(). Ты получишь именно то, что просишь. Слышал афоризм "компьютер делает не то, что вы хотите, а то, что вы сказали ему сделать"? Попробуй рассмотреть варианты
    Код:
    std::string str2(str1, 1, 5);
    /* ... */
    str2.assign(str1, 1, 5);
    Не всё в этом мире делается через оператор присваивания, и далеко не всегда нужны подстроки.

    ----------
    Одни с годами умнеют, другие становятся старше.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 22:47 23-01-2007 | Исправлено: Qraizer, 22:51 23-01-2007
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FMeat
    По поводу первого вопроса.
    В угловых скобках в #include пишутся имена заголовочных файлов, которые компилятор должен искать в месте своей установки, то есть т.н. "системные заголовочные файлы". При поиске такого файла компилятор не смотрит в текущий каталог.
    В кавычках пишутся имена заголовочных файлов пользователя. При поиске этих файлов компилятор в первую очередь смотрит в текущий каталог, а затем - в системный.
    Вот и все отличие.
    По второму вопросу.
    А оно тебе надо? Если они "реальные кулхацкеры", они начнут свои гадости с удвоенной силой. Тут проще решить орг. мерами. Поймал такого на чем-нибудь - или штраф выставляй или вообще нафиг отключай. А за вдувание на рабочий стол чего-то там они могут тебе еще счет выставить. Или просто firewall поставить.
     
    Qraizer
    В основном - полностью согласен, есть одно маленькое но... Сколько ты мультитридные библиотеки не используй, strtok не исправишь . Там просто это по определению невозможно (если разработчики не используют, конечно, TLS). Есть функции, которые безопасно работают в multithread окружении при использовании соотв. библиотек, а есть - небезопасные. Хотя, наверно, это сильно зависит от разработчика компилятора и библиотек.
     
    Ну и вопрос, напоследок. Где-то краем глаза читал или краем уха слышал, что std::string реализует отложенное копирование. Это так? Кто может подсказать?

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 07:18 24-01-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mickey_from_nsk

    Цитата:
    Где-то краем глаза читал или краем уха слышал, что std::string реализует отложенное копирование. Это так? Кто может подсказать?

    И да и нет. стандарт (как я помню) не обязывает так делать, как следствие есть много разных реализаций с разными оптимизациями как с подсчетом ссылок (отложенное копирование) так и оптимизации для коротких строк и еще какие-нибудь. все зависит от конкретной stl  

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 11:00 24-01-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer

    Цитата:
    Не всё в этом мире делается через оператор присваивания, и далеко не всегда нужны подстроки.

    Спасибо, именно это я и хотел узнать
     
    Еще вопросик:
    stringstream - это что, в STL единственный метод конвертировать строки в числа и обратно? Если да, то как можно заставить istringstream не копировать уже существующую строку в свой буфер, а использовать ее (или ее часть) в качестве оного? Иначе проделывается куча работы по выделению/освобождению памяти, если мне надо часто конвертирвать строки в числа.
    И еще я прочитал, что конвертирование чисел в строки и наоборот с помощью stringstream гораздо медленнее, чем с помощью atoi, atof, itoa и т.д. Так почему бы не использовать их? Только потому что это функции С, и стандарты не позволяют их использовать?

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 13:58 24-01-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru