Консультация № 167616
18.05.2009, 10:54
0.00 руб.
0 6 1
Здравствуйте!

Объясните доступным языком в чем отличие между System::String ^ , string(из инклуда <string.h>) char * и char! Это меня уже 3 день в ступор вводит....
И че это за оператор подозрительный ^; не нравится он мне :)

И если не сложно приведите пожалуйста пример взятие строки из textBox ее копирование в другую строку преобразование в int и преобразование в char или char*
Заранее спасибо!

Обсуждение

Неизвестный
18.05.2009, 19:54
общий
это ответ
Здравствуйте, Krash!
System::String^ это класс .NET. Visual C++ Compiler поддерживает расширение языка С++/CLI позволяющее писать программы под .NET Framework.

class string этот класс является часть стандартной библиотеки шаблонов STL. Очень удобен для представления строковых данных. Логично его использовать при программировании на С++

char это тип данных размером 1байт. Часто используется для представления символа. По умолчанию(так принято в настройках компилятора которые всегда можно изменить) этот тип знаковый те -128..127.

char* это, соответственно, указатель на char. Фактически 4-х байтовый(на 32х битных ОС) адрес в памяти. Тоже может использоваться для представления строк в стиле C.
Неизвестный
18.05.2009, 20:00
общий
Насчет textBox. Вы имеете ввиду проект Windows Forms?
Неизвестный
18.05.2009, 20:22
общий
Да конечно. У меня Visual Studia C++ 2008 я второй день учу C++ и уже в шоке......вот код вызвавший затруднение (обрабочик клика по кнопке):

private: System::Void bbConn_Click(System::Object^ sender, System::EventArgs^ e) {
String ^szAddr = "172.23.0.74";
SOCKET hSocket;
struct sockaddr_in server;
//Получаем IP servera
szAddr = textBox1->Text;
//Создаем сокет
hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//Заполняем структуру sockaddr_in
server.sin_family = AF_INET;
server.sin_port = htons(1313);
server.sin_addr.S_un.S_addr = inet_addr(szAddr);
iRet = connect(hSocket, server, sizeof(server));
}
};

error C2664: inet_addr: невозможно преобразовать параметр 1 из 'System::String ^' в 'const char *'

Если этот вариант работы со строками безграмотен предложите пожалуйсто свой вариант! А и чуть не забыл как в С++ заполнить оставшую часть структуры sockaddr_in.sin_zero нулями. В делфи есть такая функция FillChar. Есть ли что-нибудь подобное в С++?
Неизвестный
18.05.2009, 20:40
общий
Проблема в том, что Вы смешиваете в программе типы .NET и родные типы C++. Уж коли взялись писать программу под .NET то и пользуйтесь функционалом .NET Framework. Иначе ничего не получится. Тут надо бы углубиться в теорию программирования под .NET.
Неизвестный
18.05.2009, 20:52
общий
Вы не могли бы посоветовать литературу....для совсем начинающих в этом деле......и все таки на моем примере разъяснить как нужно делать.
Неизвестный
18.05.2009, 21:59
общий
http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.aspx
Кроме того на C++ под .NET программируют только самые отчаянные Попробуйте C#.
Код:

IPAddress^ ipAddress=IPAddress::Parse(L"172.23.0.74");
IPEndPoint^ ipEndPoint=gcnew IPEndPoint(ipAddress,1313);
Socket^ socket=gcnew Socket(AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp);
socket->Connect(ipEndPoint);
Форма ответа