привет кодерам ачата! такой вопрос: есть ли в windows api аналог функции memcmp из стандартной сишной библиотеки? погуглил - так и не понял толи есть, толи нету. если есть то ткните носом в msdn, если нету - то как написать? превое, что приходит на ум - сравнивать память как массив unsigned char-ов(то бишь байт): PHP: int my_memcmp(void *block1, void *block2, int size) { for(int i=0;i<size;i++) if(block1[i]!=block2[i]) return 0; return 1; } но тут возможен выход за пределы выделенной памяти. как избежать такого?оператор sizeof не проканывает для указателей, так что сделать так: PHP: int my_memcmp(void *block1, void *block2, int size) { if((sizeof(*block1)<size) || (sizeof(*block2)<size)) return -1; for(int i=0;i<size;i++) if(block1[i]!=block2[i]) return 0; return 1; } не получиться. как быть? да и еще: какие в windows api есть аналоги функциям copy delete pos из дельфы?
Если чего-то не знаешь как сделать, то никто не запрещает посмотреть как это сделано в CRT. (VS 2008 Prof в комплекте имеет исходники CRT) А еще можно заюзать старый добрый CRT из винды (msvcrt.dll) чтобы прилонковать её надо найти lib файл от Visual C++ 6.0 хотя бы
нашел на msdn функцию heapsize чтоб узнавать размер кучи. написал свое memcmp: PHP: bool my_memcmp(void *block1,void *block2,DWORD size) { u_char buf1,buf2=0; if(HeapSize(GetProcessHeap(),0,block1)>size || HeapSize(GetProcessHeap(),0,block2)>size) return false;//проверим размер чтобы продупредить выход за пределы выделенной памяти for(u_long i=0;i<size;i++) //сравниваем память по байтам { CopyMemory((void *)&buf1,(void *)((u_long)block1+i),1);//берем по 1-му байту CopyMemory((void *)&buf2,(void *)((u_long)block2+i),1); if(buf1!=buf2) return false;//если разные - вернем false(если хотябы один не совпадает - блоки не идентичны) } return true;//если досих пор не вышли - все байты абсолютно одинаковые. вернем true } P.S. я пишу в dev c++, есть ли на msdn отдельно исходники crt-шки?