Как преобразовать string в string c
Перейти к содержимому

Как преобразовать string в string c

  • автор:

Преобразование из System::String в Char в Visual C++

В этой статье описывается несколько способов преобразования из System::String* в char* с помощью управляемых расширений в Visual C++.

Исходная версия продукта: Visual C++
Исходный номер базы знаний: 311259

Сводка

В этой статье рассматриваются следующие пространства имен библиотеки классов Microsoft платформа .NET Framework:

  • System::Runtime::InteropServices
  • Msclr::interop

В этой статье рассматриваются несколько способов преобразования из System::String* в char* с помощью следующего:

  • Управляемые расширения для C++ в Visual C++ .NET 2002 и Visual C++ .NET 2003
  • C++/CLI в Visual C++ 2005 и Visual C++ 2008

Способ 1

PtrToStringChars предоставляет внутренний указатель на фактический String объект. При передаче этого указателя в вызов неуправляемой функции необходимо сначала закрепить указатель, чтобы убедиться, что объект не перемещается во время асинхронного процесса сборки мусора:

//#include System::String * str = S"Hello world\n"; const __wchar_t __pin * str1 = PtrToStringChars(str); wprintf(str1); 

Способ 2

StringToHGlobalAnsi копирует содержимое управляемого String объекта в собственную кучу, а затем преобразует его в формат ANSI на лету. Этот метод выделяет необходимую собственную память кучи:

//using namespace System::Runtime::InteropServices; System::String * str = S"Hello world\n"; char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str); printf(str2); Marshal::FreeHGlobal(str2); 

В Visual C++ 2005 и Visual C++ 2008 необходимо добавить параметр компилятора поддержки среды CLR (/clr:oldSyntax), чтобы успешно скомпилировать предыдущий пример кода. Чтобы добавить параметр компилятора поддержки среды CLR, выполните следующие действия.

  1. Щелкните Проект, а затем — Свойства ProjectName.

Примечание. ProjectName — это заполнитель для имени проекта.

Дополнительные сведения о параметрах компилятора в среде CLR см. на следующем веб-сайте Microsoft Developer Network (MSDN):

Эти действия применимы ко всей статье.

Способ 3

Класс VC7 CString имеет конструктор, который принимает управляемый указатель String и загружает CString с содержимым:

//#include System::String * str = S"Hello world\n"; CString str3(str); printf(str3); 

Способ 4

Visual C++ 2008 представляет класс справки marshal_as маршал и вспомогательный marshal_context() класс маршал.

//#include //using namespace msclr::interop; marshal_context ^ context = gcnew marshal_context(); const char* str4 = context->marshal_as(str); puts(str4); delete context; 

Этот код не компилируется с помощью управляемых расширений для C++ в Visual C++ .NET 2002 или Visual C++ .NET 2003. В нем используется новый синтаксис C++/CLI, представленный в Visual C++ 2005, и новый код пространства имен msclr, представленный в Visaul C++ 2008. Для успешной компиляции этого кода необходимо использовать параметр компилятора /clr C++ в Visual C++ 2008.

Пример кода управляемых расширений для C++ (Visual C++ 2002 или Visual C++ 2003)

//compiler option: cl /clr #include #include #include #using using namespace System; using namespace System::Runtime::InteropServices; int _tmain(void) < System::String * str = S"Hello world\n"; //method 1 const __wchar_t __pin * str1 = PtrToStringChars(str); wprintf(str1); //method 2 char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str); printf(str2); Marshal::FreeHGlobal(str2); //method 3 CString str3(str); wprintf(str3); return 0; >

Пример кода C++/CLI (Visual C++ 2005 и Visual C++ 2008)

//compiler option: cl /clr #include #include #using using namespace System; using namespace System::Runtime::InteropServices; #if _MSC_VER > 1499 // Visual C++ 2008 only #include using namespace msclr::interop; #endif int _tmain(void) < System::String ^ str = "Hello world\n"; //method 1 pin_ptrstr1 = PtrToStringChars(str); wprintf(str1); //method 2 char* str2 = (char*)Marshal::StringToHGlobalAnsi(str).ToPointer(); printf(str2); Marshal::FreeHGlobal((IntPtr)str2); //method 3 CString str3(str); wprintf(str3); //method 4 #if _MSC_VER > 1499 // Visual C++ 2008 only marshal_context ^ context = gcnew marshal_context(); const char* str4 = context->marshal_as(str); puts(str4); delete context; #endif return 0; > 

Обратная связь

Были ли сведения на этой странице полезными?

Как преобразовать string в string c

Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции strtol() и snprintf() .

Из строки в число. strtol

Функция strtol() преобразует строку в число типа long int . Функция определена в заголовочном файле stdlib.h и имеет следующий прототип:

long strtol(const char *restrict str, char **restrict str_end, int base);
  • str — строка с числом, которое надо преобразовать в числовой тип. Ключевое слово restrict указывает компилятору оптимизировать код и что никакой другой параметр не будет указывать на адрес данного параметра.
  • str_end — указатель на последний символ строки. Данный параметр можно игнорировать, передавая ему значение NULL
  • base — основание, система исчисления, в которую надо преобразовать данные (значение от 2 до 36).

Результатом функции является преобразованное число типа long .

Например, преобразуем строку в число в десятичной системе:

#include #include int main(void) < const char * str = "24 flowers"; long result = strtol(str, NULL, 10); printf("Result: %ld\n", result); // Result: 24 return 0; >

В примере выше второй параметр функции никак не использовался — мы ему передавали значение NULL , и функция нормально работала. Однако он может быть полезен, если нам надо получить остаток строки, которая идет после числа:

#include #include int main(void) < const char * str = "24 flowers"; char* str_end; long result = strtol(str, &str_end, 10); printf("Result: %ld\n", result); // Result: 24 printf("Rest of the string:%s\n", str_end); // Rest of the string: flowers return 0; >

Из числа в строку. snprintf

Функция snprintf() преобразует число в отформатированную строку. Функция определена в заголовочном файле stdio.h и имеет следующий прототип:

int snprintf(char *restrict str_buffer, size_t buffer_size, const char *restrict format, . );
  • str_buffer — строка, в которую помещается преобразованное число.
  • buffer_size — максимальное количество символов строки. Функция записывает в строку buffer-size — 1 байт и добавляет концевой нулевой байт
  • format — задает формат преобразования в строку.

При успешном преобразовании функция возвращает количество символов, записанных в строку (исключая концевой нулевой байт). При неудачном преобразовании возвращается отрицательное число.

#include int main(void) < int number = 354; char str [10]; snprintf(str, sizeof str, "%d", number); printf("Result: %s\n", str); // Result: 354 return 0; >

При этом строка форматирования может содержать множество параметров:

#include int main(void) < int count = 3; double price = 79.99; char str [50]; snprintf(str, sizeof str, "Count: %d \tPrice: %.2f", count, price); printf("%s\n", str); // Count: 3 Price: 79.99 return 0; >

Практическое руководство. Преобразование строки System::String в стандартную строку

Вы можете преобразовать объект в String std::string или std::wstring без использования PtrToStringChars в Vcclr.h.

Пример

// convert_system_string.cpp // compile with: /clr #include #include using namespace std; using namespace System; void MarshalString ( String ^ s, string& os ) < using namespace Runtime::InteropServices; const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer(); os = chars; Marshal::FreeHGlobal(IntPtr((void*)chars)); >void MarshalString ( String ^ s, wstring& os ) < using namespace Runtime::InteropServices; const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer(); os = chars; Marshal::FreeHGlobal(IntPtr((void*)chars)); >int main()
test abcd efgh 

См. также

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

Как преобразовать string в string[] для ввода массива с клавиатуры?

Author24 — интернет-сервис помощи студентам

например есть массив и нужно в него ввести данные с клавиатуры. например три слова.

string [] q ;

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Нельзя преобразовать тип Tuple к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка "Нельзя преобразовать тип.

C++, xml и CLR. Как преобразовать String^ в string или int?
Есть небольшой файл "Proba.xml", <Proba> <data numbers="1,2,3,4,5" /> <data.

1519 / 462 / 126
Регистрация: 09.01.2018
Сообщений: 1,094

ЦитатаСообщение от Anton124 Посмотреть сообщение

как преобразовать string в string[] для ввода массива с клавиатуры

Надо не преобразовать, а установить значения.

1 2 3 4 5 6
string [] q = new string[3]; for(int i = 0, i  q.Length; i++) { Console.WriteLine("Введите значение"); q[i] = Console.ReadLine(); }

Добавлено через 5 минут
Или разделить по пробелам

string [] q = Console.ReadLine().Split(" ");

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как преобразовать string[] в string
второй день изучаю C#, так что вопрос скорее всего заезженный нужно, чтобы при выборе нескольких.

Как исправить ошибку ‘Не удается неявно преобразовать тип «System.Collections.Generic.IEnumerable» в «string»‘?
Не удается неявно преобразовать тип "System.Collections.Generic.IEnumerable<string>" в "string". .

Преобразовать вводимое string в нужное string[]
Господа, подскажите, пожалуйста: есть класс, который работает с массивом и еще со всякой мелочью, в.

Не удается неявно преобразовать string в string[]
Пишет, что не удается не удается неявно преобразовать тип string в string Надо считать строки с.

Как преобразовать string в char? Для получения данных из Edit?
Помогите пожалуйста разобраться как преобразовать стринг в чар код работы прилагаю unit.

Или воспользуйтесь поиском по форуму:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *