zakazdiskovyura
1

Конвертировать String в char и обратно

05.08.2009, 08:07. Показов 6589. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кратко опишу ситуацию: программирую в Borland Builder C++, Visual Studio 2008 поставил только сегодня и не могу разобраться, как конвертировать из формата String в char и обратно. Часто приходится писать функции, параметр(-ы) которого были в Builder типа AnsiString. Большинство API функций принимают параметры типа char, в Builder эта проблема решалась очень просто, например:
C++
1
2
3
4
5
AnsiString a = "qwerty";
char *b;
b = a.c_str();
//... исользую b по назначению
delete [] b;
Так же легко было принимать значения из Edit'ов, например так:
C++
1
2
BYTE *Buf1 = new BYTE[Edit1->Text.Length()];
Buf1 = Edit1->Text.c_str();
все очень просто. Как я понял Visual Studio в эдитах оперирует Юникодом (на сколько я понял)
На форумах нашел такой выход:

C++
1
2
String ^lName = textBox1->Text;
char* pString = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(lName).ToPointer();
Подскажите, пожалуйста, есть какой-нибудь более понятный способ писать функции не заморачиваясь длинной строки и выделением памяти (т. е. передавая String), а в функции уже переводить его в char?

Заранее признателен Вам за любую помощь!
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2009, 08:07
Ответы с готовыми решениями:

Перевод String->char и обратно
нужна ваша помощь)) сперва перевожу строку из текстбокса в переменную типа чар:...

Конвертировать char* в String^
Здравствуйте. У меня создан класс с полем типа char*. Чтобы вывести это поле на форму, например, в...

Конвертировать string массив в char
Здравствуйте, друзья! Имеется массив string, который поэлементно заполняется из textBox1. Нужно...

Конвертировать русский символ char в строку String^
Здравствуйте, докопался в MSDN до такой вот ф-ции String(Char, Int32) которая инициализирует новый...

5
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538
05.08.2009, 11:22 2
Подскажите, пожалуйста, есть какой-нибудь более понятный способ писать функции не заморачиваясь длинной строки и выделением памяти (т. е. передавая String), а в функции уже переводить его в char?
почитай про c++ и managed с++. если ты пишешь под .net то зачем тебе всякие lpctstr?

зы
C++
1
2
BYTE *Buf1 = new BYTE[Edit1->Text.Length()];
Buf1 = Edit1->Text.c_str();
утечка памяти тут
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
05.08.2009, 11:33 3
Цитата Сообщение от exe-dealer Посмотреть сообщение
Код C++1 2 BYTE *Buf1 = new BYTE[Edit1->Text.Length()]; Buf1 = Edit1->Text.c_str();
утечка памяти тут
здесь нет утечки памяти код не полный... а вот удаляет он ее не правильно - не тот указатель
0
zakazdiskovyura
06.08.2009, 07:29 4
Как утечка памяти? Выделил память необходимого объема, указателю присваеваю адрес соответствующего массива, коммандой delete очищаю память...
C++
1
2
3
BYTE *Buf1 = new BYTE[Edit1->Text.Length()];
Buf1 = Edit1->Text.c_str();
delete [] Buf1;
Я что-то не так делаю? подскажите...

> почитай про c++ и managed с++. если ты пишешь под .net то зачем тебе всякие lpctstr?
lpctstr в данном случаи просто тип данных параметра, передаваемого в API функцию... Если в функции определен такой тип, какой я должен передавать?
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
06.08.2009, 09:27 5
c_str() возвращает текущий указатель в стеке на начало строки. Т.о. *Buf1 запоминает какой то адрес, в котором через пару тактов будет находится совсем не строка, а другой (совершенно левый) объект... его и удаляет delete [] Buf1;
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
06.08.2009, 09:47 6
Вообще в visual studio удобнее пользоваться классом CString
Юникод можно вообще отключить в настройках проекта!
Получить из CString char* очень просто
C++
1
2
3
4
CString str1;
char* str2;
....
str2=str1.GetBuffer();
Эта функция возвращает указатель на память буфер со строкой.
После удаления str1 указатель будет невалидный.

Обратный перевод:
C++
1
str1.Format("%s",str2);
0
06.08.2009, 09:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2009, 09:47
Помогаю со студенческими работами здесь

Конвертировать из byte[] в List<string> и обратно
Добрых времени суток. Собственно как переветс List&lt;string&gt; в byte, а потом наоборот. Нужно это для...

Как конвертировать String[] в Char[,] ?
Суть вопроса в заголовке ну на всякий повторюсь как конвертировать String в Char

Не могу конвертировать char в string
Добрый день. x возвращается как char, а я хочу чтобы это был string. using System; class...

Как конвертировать string в массив char
Как конвертировать string в массив char


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru