Przekazanie ciągu znaków do tablicy w funkcji

0

Kochani potrzebuje przekazać do funkcji ciąg znaków i dodać go do tablicy.. Nie bardzo jakoś mi to idzie, za każdym razem co jakiś pomysł do glowy wpadnie to dostaje warninga... Ogólnie chcialbym osiągnąć takie coś:

MyFunc("hello world");

Void MyFunc(char mystring)
{
       uint8_t myarray[] = mystring;
}

Wiem że to jest niepoprawnie - po prostu zarys ideowy.. Ktoś coś naprowadzi? Będę wdzieczny za wskazówki...

1

Jak przekazujesz jakiś tekst to przekazujesz tak naprawdę wskaźnik gdzie on leży w pamięci czyli char*.

Musisz przekopiować sobie dane z pod tego adresu, w C++ masz przeciążone do tego operatory w C ręcznie trzeba.
Czyli musisz zarezerwować sobie pamięć i przekopiować tam dane. Statycznie lub dynamicznie.

C++

String myarray = mystring;

QString myarray = mystring;

C


char myarray[255];  // statycznie

unsigned int len = strlen(mystring);
char *myarray = malloc(len+1); // dynamicznie

// kopiowanie

strncpy(myarray, mystring, len);

// edit
jak wyedytowałeś, to dodałeś uint8_t, strncpy przyjmuje char*, to w takim wypadku użyj memcpy(myarray, mystring, len+1)

0

Edytowałem juz wcześniej ale chyba nie zapisało. Wracam zaraz do domu po pracy i będę testował także dam znać o efektach testów :) .. Bardzo dziękuje za wskazówkę. Musze nadrobić zaległosći z możliwości str.. to chyba najsłabszy punkt w mojej znajomości C..

0
LiMSHOTS Photo napisał(a):

Edytowałem juz wcześniej ale chyba nie zapisało. Wracam zaraz do domu po pracy i będę testował także dam znać o efektach testów :) .. Bardzo dziękuje za wskazówkę. Musze nadrobić zaległosći z możliwości str.. to chyba najsłabszy punkt w mojej znajomości C..

Dlaczego w Qt C++ używac technik z C .... nie wiem ... "może" musisz, ale obstawiam że wybrałeś tak, bo nie odróżniasz C od C++

Szerszy konteks kodu by mógł pomóc, bo na razie jest to siłowanie się z niewiadomym celem.

0

Cel jest dość jasno napisany - reszta kodu jest zbędna - prosta funkcja przekazująca dane w formie tektstu do tablicy uint8_t celem późniejszego zapisania w pamięci Eeprom.. Nie wiem co to jest QT natomiast odróżniam C od C++.. w C++ nie miałbym problemu natomiast w C nie mam stringa i jak kolega wyżej napisał trzeba zrobić sobie samemu obsługę.

Bardzo dziękuje Szalony Programista2 za wskazówki ;) kod działa jak najbardziej poprawnie...

void prepare_eeprom_write(Eeprom_t *eeprom, uint16_t page, const char * pString)
{
	eeprom->how_long_str = strlen(pString);
	eeprom->data_to_send = malloc(eeprom->how_long_str+1);

	memcpy(eeprom->data_to_send, pString, eeprom->how_long_str+1);

	EEPROM_Write(page, 5, eeprom->data_to_send, eeprom->how_long_str+1);
}
0
  1. Gdzie sprawdzanie czy malloc się udał? Lubisz życie na krawędzi? xD
  2. Za memcopy do stringów będziesz otrzymywał ojeby od programistów C. W imię zasad i unikania trafienia twego kodu na listę CVE po tym jak ty lub ktoś go zmodyfikuje po pijaku w sposób który pozwoli na przepełnie bufora i wypuści to w świat. Zawodowcy używają strncpy.
  3. Powtarzaj zawsze przed posiłkiem mantrę "strncpy and snprintf or GTFO".

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