тип char* в .Net

программирование windows .net

в вышеупомянутой библиотеке можно встретить конструктор string(char*). Но зачем он нужен , если этот тип уже не используется в c# ? Может это введено для совместимости с C++\CLI ? И какими средствами можно перевести из char* в string и обратно?

Примечание:
wchar_t использовался в WinApi. В # тип данных был расширен для более удобного взаимодействия с Api ?
Ответы:
C# поддерживает специальный unsafe синтаксис.
string abc = "abc";
char[] chars = new char[] { 'a', 'b', 'c' };
unsafe
{
   // фиксирует указатели, чтобы сборщик мусора их не переместил
   fixed (char* ptr_abc = abc, ptr_chars = chars)
   {
       char* local = stackalloc char[abc.Length + 1]; // никакой кучи и сборки мусора, только стек
       // можно запросто вылететь за границы массива и не получить исключения
       for (int i = 0; ptr_abc[i] != 0; i++) local[i] = ptr_abc[i];
       
       string new_abc = new string(ptr_abc + 1);
       string new_chars = new string(ptr_chars, 1, 2); // так тоже можно
       // главное не забывать, что в C# char == Си wchar_t
   }
}


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.