Глава 21. Понятие строк в ANSI С и ANSI C++_________________________567
! Предупреждение
Будьте особенно внимательны при чтении описаний конструкторов. Если два конструктора:
string fromCharacterToCharacterString!(nullTerminatedString, 0, 5);
string fromCharacterToCharacter3tring2("Добро пожаловать в обитель конструкторов!". О, 5) ;
дают один и тот же результат, то следующие два:
string fromCharacterToCharacterString3(nullTerminatedString, 6) ;
string fromCharacterToCharacterString4("Добро пожаловать в обитель конструкторов!", 6);
совершенно различный. Если вывести fromCharacterToCharacterStringS на экран, то вы увидите
пожаловать в обитель конструкторов!
В ТО Время как fromCharacterToCharacterSt.ring4 будет выглядеть так:
Добро *
Это происходит вследствие того, что когда конструктору строкового класса с единственным аргументом size_t передается аргумент const. char*, то создаваемая строка начинается с нулевого байта аргумента const char* и имеет длину size_t байт.
Наконец, в качестве аргументов, передаваемых строковым конструкторам, можно использовать аргументы типа char, как это было показано для singleCharacterString И repeatedCharacterString. При вызове конструктора string (char) создается экземпляр строки в один символ, а вызов конструктора string (char, size_t) создает строку из size_t одинаковых символов.
Использование строкового класса ANSI C++ с ресурсами Windows.
В своей интерпретации строкового класса ANSI C++ специалисты компании Borland не забыли разработчиков приложений для Windows. В конструкторах ANSI в качестве входных параметров можно использовать ресурсы STRINGTABLE. Соответствующая форма конструктора, согласно Справочнику по библиотеке классов, выглядит следующим образом:
string( HINSTANCE instance, UINT id, int len = 255);
Если вы напрямую работаете с Windows API, то вы можете использовать
ЭТОТ КОНСТруКТОр так Же, как И ВЫЗОВ Windows LoadString:
int LoadString( HINSTANCE hinst, UINT idResource, LPSTR IpszBuffer, int cbBuffer) ;
Единственное отличие конструкторов строкового класса — это отсутствие необходимости в аргументе IpszBuffer. Буфер будет включен в экземпляр строкового класса, возвращаемого структурой. Когда ваш строковый ресурс