Do tablicy char z pola tekstowego

0

Cześć
Chciałbym sczytać z pola tekstowego wpisaną wartość i wrzucić ją do tablicy char. Szukam już w necie rozwiązania od dłuższego czasu, milion opcji sprawdziłem, nie mogę sobie poradzić.
fragment:

	System::String^ zmienna=this->pole1->Text;
	char tablica[40];
	const char* c_str();
(1)	tablica = zmienna.c_str();

i błąd:

(1) - 1>c:...\Form1.h(114): error C2228: left of '.c_str' must have class/struct/union

0

char tablica[40];
if(this->pole1->Text.size()<sizeof(tablica)) strcpy(tablica,this->pole1->Text.c_str());
else // się nie mieści.

0

1>c:...\Form1.h(119): error C2228: left of '.size' must have class/struct/union
1>c:...\Form1.h(119): error C2228: left of '.c_str' must have class/struct/union

Niestety...

Dodam jeszcze że środowisko Visual 2010 Express i dołączone biblioteki:
#include <iostream>
#include <fstream>
#include <string>

0

Z tego co tu widze uzywasz wynalazku zwanego C++/CLI a nie C++. OK, chcesz skonwertowac Stringa (nie myslic z std::string) do char*, pytanie czemu to ma sluzyc?

Bo wiesz, jest taki problem, ze tekst moze byc kodowany na rozne sposoby i czasem na jeden znak przypada wiecej niz jeden bajt. Zdaje sie, ze String z C++/CLI przechowuje znaki w taki wlasnie sposob. Dlatego jezeli chcesz wykonywac jakies dzialania na tekscie (a nie na suchych bajtach) to proponuje zrezygnowac z tablicy charow i wykorzystac tablice wcharow. W innym przypadku, daj znac do czego to potrzebujesz.

Konwersje ze stringa do wcharow mozesz zrealizowac w nastepujacy sposob:

	String^ str = "xyz";
	cli::array<wchar_t, 1>^ cliArray = str->ToCharArray();	
	wchar_t* wcharArray = new wchar_t[cliArray->GetLength(0)+1];
	for (int i=0; i < cliArray->GetLength(0); ++i) {
		wcharArray[i] = cliArray[i];
	}	
	wcharArray[cliArray->GetLength(0)] = '\0';
	delete [] wcharArray;

Pisalem troche na szybko, mysle ze da sie to zrobic troche lepiej ale na chwile obecna bedziesz musial zadowolic sie tym co mam.

BTW: po co meczysz sie z C++/CLI? Skoro piszesz na platforme .NET to nie lepiej robic to po ludzku w C#?

0

Nie lepiej w C, bo polecenie jest CLI... :(
Muszę zamienić znak ascii na reprezentację binarną.
a = 00000000, b = 00000000 itd.

0
grabek93 napisał(a):

Nie lepiej w C, bo polecenie jest CLI... :(
Muszę zamienić znak ascii na reprezentację binarną.
a = 00000000, b = 00000000 itd.

A jestes pewny ze tu chodzi o jezyk C++/CLI a nie C++ w rozumieniu konsoli? Pytam bo troche mnie to dziwi. No ale skoro chodzi o C++/CLI to ok.

Zadanie jest o tyle ciekawe, ze nie do konca wiemy co zrobic ze znakami ktore sa spoza zakresu ASCII juz nie mowiac o przypadku, w ktorym znak nie miesci sie w jednym bajcie.

Proponuje wiec takie rozwiazanie, ze program bedzie wyswietlal znak w formie 16-bitowego kodu - najwyzej pierwsze bity beda ustawione na 0. Ma to te zalete, ze nie bedzie problemu w sytuacji kiedy trafisz na znak ktory nie miesci sie w jednym bajcie. Zerknij na kod:

#include "stdafx.h"
#include <bitset>

using namespace System;

String^ getBinaryCode(wchar_t wch) {
	std::bitset<sizeof(wchar_t)*8> bs(wch);
	String^ binaryCode = gcnew String(bs.to_string().c_str());
	return binaryCode;
}

int main(array<System::String ^> ^args)
{
	String^ str = "ABC";	
	for (int i=0; i < str->Length; ++i)
	{
		Console::WriteLine(
			String::Format("Znak '{0}' ma kod {1}", str[i], getBinaryCode(str[i]))
			);
	}
	Console::ReadKey();
    return 0;
}

To program konsolowy, przerobienie tego na program okienkowy nie powinno byc trudne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1