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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    TargeTSan

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BednuuStudent
    На будущее. В любой нормальной конторе за транслит бьют по шее, причём больно.
    Учите английский и управление локалями.
    За описанием CRT идите в MSDN.
     
    И последнее. Для ленивых студентов есть отдельный форум "Задачи С++"
    (Хотя, подозреваю, там уже давно никто не отвечает )
     
    Добавлено:
    asi81
    А не могли бы Вы уточнить задачу?
    Что Вы будете делать с получившейся LPCSTR?
     
    Вообще же такое преобразование неоднозначно, поскольку wchar_t это по сути кодировка UTF16 (номер 1200). Поэтому Вам необходимо знать, какую кодировку требуется получить на выходе. Конверсия между UTF8/UTF16/UTF32 производится простой перетасовкой битов, без таблиц кодировок, посколько это просто 3 разных представления UNICODE
     
    В WinAPI смотрите WideCharToMultiByte и MultiByteToWideChar.
    Для кроссплатформы есть libiconv.

    Всего записей: 21 | Зарегистр. 12-10-2008 | Отправлено: 12:44 22-01-2010
    asi81



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TargeTSan
    Кодировка в данном случае меня не волнует, так как все работа идет с английским текстом. Суть в том, что я имею проект, где используется tchar, в частности в аргументах командной строки. Этот проект компилируется под разными платформами, и tchar в разных платформах может быть либо char либо WCHAR. В одном месте мне нужно привести строку TCHAR[] к строке char[]. Если использовать WideCharToMultiByte  или его аналог wcstombs, то в проекте без юникода компилятор законно выдаст ошибку, так как эти функции(WideCharToMultiByte) в качестве источника принимают WHAR, в то время как tchar превратился в char.
     
    Конечно можно написать макрос типа
    #ifdef UNICODE
    #define myfun wcstombs
    #else
    #define myfun strncpy
    #enfif
     
    Но неужели такой макрос уже не написан?

    Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 14:30 22-01-2010
    karakurt2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asi81
    наберите strncpy в MSDN, и увидете, что макросы определены в файле <tchar.h>.  

    Всего записей: 733 | Зарегистр. 06-12-2003 | Отправлено: 16:52 22-01-2010
    asi81



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karakurt2
    Я посмотрел, но сразу там не увидел. Возможно Вы имеете ввиду функцию _tcsncpy которая копирует tchar[] строки. Мне же нужно не копирование, а именно перевод из tchar[] строки в char[] строку.  Которая в случае Unocode превращается в wcstombs(..), а без юникода в  strncpy. По крайней мере с первого прохода я такой макрос не засек.

    Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 18:41 22-01-2010
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asi81
    А зачем вообще использовать char[] в юникодной программе?

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:21 22-01-2010
    asi81



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Грубо говоря, есть уже написанный программный модуль, который был написан давно. Этот программный код может использоваться в других компиляторах, которые о ни о tchar, ни о wchar могут не подозревать. Поэтому менять  уже написанный и отлаженный код я не хочу. Но хочу его использовать в Win32 и в Win32_WCE  программах. А  Win32_WCE программы, к примеру, не имеют неюникод_поддержки в принципе, то есть они работают исключительно с Unicode.

    Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 19:38 22-01-2010
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asi81
    Тогда остаётся лишь самому написать столь же отлаженный интерфейс к этому модулю. И свалить туда всю работу по адаптации char/tchar. Вряд ли найдутся готовые функции для создания такой смеси.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 20:23 22-01-2010
    hda0



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ValidolX
    проблема осталась
    cегодня произошел обвал снова.
    Вы еще можете глянуть исходники на предмет баги? где то может еще стопорится очередь.  
    обновлённые исходники лежат тут...
     
    з.ы. также обращаюсь к всем спецам по С/С++, гляньте сырцы пжлст на предмет баги...

    Всего записей: 158 | Зарегистр. 28-02-2005 | Отправлено: 21:54 22-01-2010 | Исправлено: hda0, 21:58 22-01-2010
    ValidolX

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hda0
    а есть ли какие-то логи где видно проблему?
    обновлённые исходники ОК

    Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 22:58 22-01-2010
    hda0



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ValidolX
    нет, в логах не видно ничего такого.
    юзера авторизуються, и при большом наплыве очередь растёт, она не успевает обработаться, и NAS не получает ответа от radius-auth, после чего юзера получают ошибку 718. тестировал и на дуал коре, и на квадрокоре, одинаково. т.е. размер оперативки и мощность проца роли не играет никакой. где то бага ещё осталась в программном коде

    Всего записей: 158 | Зарегистр. 28-02-2005 | Отправлено: 00:07 23-01-2010
    deman_ru

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста сформировать сложный sql запрос.  
    Имеется таблица вида:

    В ней отображается информация из таблицы базы данных, компонент для отображения DBGridEh, в начале каждой строки стоит CheckBox. У каждой записи есть свой идентификатор, мне нужно сформировать такой запрос, который бы выбирал данные из другой таблицы, относительно тех записей которые выбраны в первой (таблица выше). Сначала видимо нужно как то обработать, DBGridEh, а потом уже формировать запрос. Подскажите пожалуйста, хоть пару слов, натолкните на мысль!

    Всего записей: 96 | Зарегистр. 28-04-2008 | Отправлено: 22:02 23-01-2010
    ValidolX

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    deman_ru
    1) ето НЕ сложный sql запрос
    2) Я так понимаю что чекбокс мапиться на поле с таблице, да?
    тогда пишете простой SQL запрос где обединяете две таблички по условию етого поля (true - если bool)
    писать sql не буду, так как от того, что я напишу - знаний у вас не прибавиться, увы...
    А чтоб прибавилось - надо проработать несколько уроков например отсюда
     
    http://firststeps.ru/sql/sql1.html
     
    3) Поверьте, потраченный час-другой та СОБСТВЕННОЕ развитие окупиться потом очень хорошо - или деньгами, или временем, или и тем и другим

    Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 22:21 23-01-2010
    deman_ru

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ValidolX
    я наверное неправильно выразил что хотел узнать, меня в большей степени интересует, как мне из DBGridEh выбрать id, отмеченных строк? какие применить свойства или функции?
    А CheckBox делал так: в таблице сделал поле типа integer (1,0), оно у меня как логическое, потому что в СУБД Firebird, которую я использую, нет логического типа данных. В DBGridEh, на это поле установил свойство CheckBoxes=true, и KeyList 0;1.

    Всего записей: 96 | Зарегистр. 28-04-2008 | Отправлено: 23:02 23-01-2010
    ValidolX

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    deman_ru
    ОК, теперь более понятно
    насколько я понимаю (поправьте если не так) у вас дб грид связан с данными через DataSource.
    Значит надо  
    а) пробежаться по всех записях DS грида
    б) глянуть на значение в і-том рядке нужного поля (Field) - если критерий удовлетворен - узнаем id и запоминаем куда надо
    пример  - TDataSet *pDS = DBGrid1->DataSource->DataSet;
    pDS->FieldByName("id")->AsInteger
    ...
    с) рекомендуеться делать фриз гриду во время итераций по датасорсу (а то будет видно визуально что идет итерация по записям - DisableControls()/EnableControls() на датасорс->датасете (pDS)
     
    Насколько я знаю дб грид не держит всех данных датасорса, поетому другого метода (видимо) нету кроме как итерации по датасорсу.

    Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 00:11 24-01-2010
    deman_ru

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ValidolX
    вот как я с этим справился, результат заносил в Memo построчно:
     
    DataModule2->IBTable1->First();
     int n=0;
     while (!DataModule2->IBTable1->Eof)
     {
       int x;
       x=DataModule2->IBTable1->FieldByName("CHEK")->AsInteger;  
       if (x==1)
       {
         Form1->Memo1->Lines->Add(DataModule2->IBTable1->FieldByName("ID_SIMTOM")->AsString);
         n=n+1;
       }
         DataModule2->IBTable1->Next();
     }
     
    Вот теперь никак не приходит на ум, как сформировать запрос, понятно что он должен быть вида:  
    select diagnoz from rules where id_simptom=[1-я строка Memo] and id_simptom=[2-я строка Memo] and...id_simptom=[n-я строка Memo];
     
    У Вас нет никаких идей?

    Всего записей: 96 | Зарегистр. 28-04-2008 | Отправлено: 15:43 24-01-2010
    ValidolX

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

     
    deman_ru
    улыбнуло!!!
    мне б ваши проблемы .......
    ну да ладно, к сути да делу
     
    теория
    для выборки данных  будем использовать SQL селект следующей конструкции
     
    SELECT X FROM Y WHERE Z IN (A,B,C,...)
     
    осталось только правильно сформировать строку strFilter -> A,B,C...
    тут можно  
    а) сразу формировать strFilter
    б) после вашего цикла еще раз пробежаться по мемо и сформировать
     
    вар. а более интересен, делаем:
     

    Код:
     
     AnsiString strFilter;
     DataModule2->IBTable1->DisableControls();
     DataModule2->IBTable1->First();  
     while (!DataModule2->IBTable1->Eof)  
     {  
       if (1 == DataModule2->IBTable1->FieldByName("CHEK")->AsInteger)  
       {  
         if (!strFilter.IsEmpty())
            strFilter += ", ";
         strFilter += DataModule2->IBTable1->FieldByName("ID_SIMTOM")->AsString
       }  
       DataModule2->IBTable1->Next();  
     }
     DataModule2->IBTable1->EnableControls();
     
     AnsiString strSql = "select diagnoz from rules where id_simptom IN ("+ strFilter + ")";
     


    Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 16:02 24-01-2010 | Исправлено: ValidolX, 16:03 24-01-2010
    deman_ru

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

    Всего записей: 96 | Зарегистр. 28-04-2008 | Отправлено: 16:24 24-01-2010
    hda0



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите найти мелкую багу в этом кусочке кода..
    трабла такая:
    в БД указан срок действия аккаунта скажем "Jan 29 2010".
    программа icradius при проверке этой даты на текущий момент 29 января - иногда пускает а иногда не пускает пользователя, типа истёк срок действия. причем срабатывает рандомно. например срабатывает на отказ в 8 случаях из 10.
    я так понимаю: если скажем срок действия до 29 января, то должно юзера пускать до 2010-01-29 23:59:59 включительно. так?  
    почему так происходит? или может эта проблема не в этом блоке?

    Код:
     
    /*
     *      Tests to see if the users password has expired.
     *
     *      Return: Number of days before expiration if a warning is required
     *              otherwise 0 for success and -1 for failure.
     */
    static int pw_expired(UINT4 exptime)
    {
            struct timeval  tp;
            struct timezone tzp;
            UINT4           exp_remain;
            int             exp_remain_int;
     
            gettimeofday(&tp, &tzp);
            if (tp.tv_sec > exptime)
                    return -1;
     
            if (warning_seconds != 0) {
                    if (tp.tv_sec > exptime - warning_seconds) {
                            exp_remain = exptime - tp.tv_sec;
                            exp_remain /= (UINT4)SECONDS_PER_DAY;
                            exp_remain_int = exp_remain;
                            return exp_remain_int;
                    }
            }
            return 0;
    }
     
     *      Check if account has expired, and if user may login now.
     */
    static int check_expiration(VALUE_PAIR *check_item, char *umsg, char **user_msg)
    {
            int result;
            int retval;
     
            result = 0;
            while (result == 0 && check_item != (VALUE_PAIR *)NULL) {
     
                    /*
                     *      Check expiration date if we are doing password aging.
                     */
                    if (check_item->attribute == PW_EXPIRATION) {
                            /*
                             *      Has this user's password expired
                             */
                            retval = pw_expired(check_item->lvalue);
                            if (retval < 0) {
                                    result = -1;
                                    *user_msg = "Password Has Expired\r\n";
                                    break;
                            } else {
                                    if (retval > 0) {
                                            sprintf(umsg,
                                              "Password Will Expire in %d Days\r\n",
                                              retval);
                                            *user_msg = umsg;
                                    }
                            }
                    }
                    check_item = check_item->next;
            }
            return result;
    }
     

     
    з.ы.

    Цитата:
    ValidolX

    у вас не удалось найти багу с тормозами в очереди?

    Всего записей: 158 | Зарегистр. 28-02-2005 | Отправлено: 10:38 29-01-2010 | Исправлено: hda0, 11:09 29-01-2010
    ValidolX

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hda0
    Нет, не удалось, нужно практическую сессию сделать - если можно - подумайте как мне организовать тест (повторить багу у себя, есть линукс, винда)
     
    2) по коду ничего не видно, покажите ка функцию pw_expired() - вот она и решает expired или нет

    Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 10:47 29-01-2010
    hda0



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ValidolX
    показал, чуть выше...
     
    Добавлено:
    ValidolX

    Цитата:
    Нет, не удалось, нужно практическую сессию сделать - если можно - подумайте как мне организовать тест (повторить багу у себя, есть линукс, винда)  

    над для начал придумать как симулировать нагрузку без самих пользователей
    мож какого демона написать который будет делать примерно 200-250 запросов в секунду...
    но как - не знаю.. есть в комплекте всех радиусов утилиты типа radtest, но они чекают по 1 запросу....

    Всего записей: 158 | Зарегистр. 28-02-2005 | Отправлено: 11:11 29-01-2010
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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