leo Вопрос на засыпку: можно ли в си записать выражение (float)lpText+0.5 и если да, то чему оно будет равно ? На сколько я знаю, любые сишные типы можно приводить друг к другу с помошью приведения в стиле си Т.е. int a = (int)b; Для приведения в стиле C++ существуют int a = int(b); int a = static_cast<int>(b); Derived* a = dynamic_cast<Derived*>(b); Derived* a = reinterpret_cast<Derived*>(b); int& a = const_cast<int&>(b);
IceStudent > "Практически: ..." Интересно, а вот дельфям по барабану чего к чему приводить - лишь бы размер совпадал
leo правильно понял, почему (int), а не (int*). Это всего лишь пояснение компилятору, что размер 4 байта. Но не интерпретация как указатель на дворд. q_q Ну так придирайся, потому и нарисовал код, чтобы кто-нибудь придрался: "тут неправильно, надо так или иначе". А вообще есть 2 текстовых файла (словари, 1,66 Мб и 1,33 Мб), строки в них уже упорядочены по алфавиту, каждая строка - новое слово (термин) и его перевод. Строки разделены последовательностью 0D0A. infern0 Сможешь нарисовать код без приведения типов? Дерзай. Блесни хорошим дизайном и заставь VirtualAlloc вернуть char* без приведения типов.
cresta замени выражения вида Код (Text): *(lpText+j) на Код (Text): lpText[j] и Код (Text): *(lpText) на Код (Text): *lpText гораздо красивее будет
более того - напиши new char[...] и обойдешься без приведения. Или new тоже асмовая религия не позволяет использовать ?
cresta и заставь VirtualAlloc вернуть char* без приведения типов. operator new для кого придуман? [EDIT] infern0, про new не заметил
SI_16 понял. infern0 Именно. В самую точку. Асмовая религия гласит: есть byte, word, dword, qword, sixbyte, tenbyte. Остальное - от лукавого. Ну ведь в программе-то не одна переменная. Хоть тресни, не возьмёт SendMessage lpText, пока не приведёшь его к LPARAM. Что, объявить lpText как LPARAM? А как тогда быть с buffer? Делать buffer = *((char*)lpText) ? В одном месте убираем приведение - оно вылазит в другом. И так будет постоянно, покуда есть более одного типа размерностью 32 бита. А их немеренное количество... Можешь объявлять хоть с new, хоть с old, а как дойдет до SendMessage, никуда ты не денешься от приведения к LPARAM. И не зависит это от структуры проги
тогда и пиши на асме, нафига тебе лукавый с ? А то блин мало того что с языком не разобрались так еще и кричат что мол это отстой.
IceStudent Где 6 байтовые используются - не знаю, а 10 байт - родной тип для fpu. infern0 Я как-нибудь сам решу, на чём писать. У меня настроение мазохистское, поэтому использую си. А ты так и не показал, как обойтись в указаной процедуре без приведения типов Просто нарисовался с умными мыслями и всё. А на деле пшик.
указанная процедура написана ногами, поэтому в ней без приведения не обойтись. А писать программу за тебя не буду. Суть в том что если ты не хочешь или не умеешь писать правильно с точки зрения языка то это не значит что он плохой. Это значит несколько другое
Вот это и есть пшик. Программа давно написана и работает, никто не просит тебя её писать. А если не можешь подтвердить свои слова делом, то не надо ссылаться на выдуманные причины. Пожалуйста, не пости сюда больше, если тебе нечего сказать конструктивного.
имхо, если еще актуально, надо вместо while ((*((char*) ((int)lpText+j))!=0xA) || (*((char*) ((int)lpText+j))!=0xD)) писать while((lpText[j]!=0xA)&&(lpText[j]!=0xD)) как уже говорил Artemy... ведь тебе надо выполнять цикл пока j-ый символ не равен 0xA и не равен 0xD Ведь если использовать "или" то будет невыполнятся или только первое условие, или только второе, что к завершению цикла однозначно не приведет...