Глава 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. Буфер будет включен в экземпляр строкового класса, возвращаемого структурой. Когда ваш строковый ресурс