Всем привет писал для себя может кому то пригодится Code: MemStrA MemStrIA MemStrW MemStrIW Str - указатель в возможно не нуль завершенный буфер cchStr - размер в !символах буфера Str с учетом терминатора SubStr - указатель в нуль завешенный буфер с искомой строкой ex: char buf[] = {'c', 'o', 'o', 'l'} str = MemStrA(buf, _countof(buf), "cool") printf("%.*s\n", _countof(buf), str) бывает нужно выполнить strstr в строке которая может не завершаться терминатором мне конкретно это нужно было для поиска в буфере функции send строки Accept-Encoding: для замены в WINAPI и CRT таких функций не нашел поэтому и накалякал Code: PSTR MemStrA(PCSTR Str, SIZE_T cchStr, PCSTR SubStr) { SIZE_T cchSubStr; if (!cchStr || !*SubStr) return NULL; cchSubStr = lstrlenA(SubStr); while (cchStr >= cchSubStr && *Str) { if (!StrCmpNA(Str, SubStr, cchSubStr)) return (PSTR)Str; cchStr--; Str++; } return NULL; } PSTR MemStrIA(PCSTR Str, SIZE_T cchStr, PCSTR SubStr) { SIZE_T cchSubStr; if (!cchStr || !*SubStr) return NULL; cchSubStr = lstrlenA(SubStr); while (cchStr >= cchSubStr && *Str) { if (!StrCmpNIA(Str, SubStr, cchSubStr)) return (PSTR)Str; cchStr--; Str++; } return NULL; } PWSTR MemStrW(PCWSTR Str, SIZE_T cchStr, PCWSTR SubStr) { SIZE_T cchSubStr; if (!cchStr || !*SubStr) return NULL; cchSubStr = lstrlenW(SubStr); while (cchStr >= cchSubStr && *Str) { if (!StrCmpNW(Str, SubStr, cchSubStr)) return (PWSTR)Str; cchStr--; Str++; } return NULL; } PWSTR MemStrIW(PCWSTR Str, SIZE_T cchStr, PCWSTR SubStr) { SIZE_T cchSubStr; if (!cchStr || !*SubStr) return NULL; cchSubStr = lstrlenW(SubStr); while (cchStr >= cchSubStr && *Str) { if (!StrCmpNIW(Str, SubStr, cchSubStr)) return (PWSTR)Str; cchStr--; Str++; } return NULL; }
Если кому-то не принципиален язык, на C++ не надо писать велосипедов, да и код получается кроссплатформенным: PHP: #include <iostream> #include <string> int main() { char buf[] = {'a', 'b', 'c', 'c', 'o', 'o', 'l'}; std::string str(buf, sizeof(buf) / sizeof(char)); std::cout << "Pos: " << str.find("cool") << std::endl; return 0; }