

-----------------------------------

nobody

20 Oct 2018 03:45



-----------------------------------

Vorbeam de prima varianta cu bluetooth unde incerci sa speli dolarii.

La acelasi String poti adauga NULL, dar cand incepi sa folosesti functii de manipulare, acel string devine impredictibil dupa primul NULL.


  char mightynull = 0 ;
 
  String string_1 = "$$$String_1_";
  string_1 += mightynull ;
  string_1 += "LOSTINVAIN";
  Serial.println(string_1);
  Serial.println(string_1.length());

  String string_2 = "WTF_";
  string_2 += string_1;
  Serial.println(string_2);
  Serial.println(string_2.length());
  
  String string_3 = "HMMMMM";
  string_3 = string_1.substring(3, 23); 
  Serial.println(string_3);
  Serial.println(string_3.length());



Rezultat:

$  $  $  S  t  r  i  n  g  _  1  _ <0> L  O  S  T  I  N  V  A  I  N
24 24 24 53 74 72 69 6E 67 5F 31 5F 00 4C 4F 53 54 49 4E 56 41 49 4E
Lungime: 23, s-a pastrat si ce-i dupa NULL

W  T  F  _  $  $  $  S  t  r  i  n  g  _  1  _  <0>_ <0> I  N <0><n><0><0><0> r
57 54 46 5F 24 24 24 53 74 72 69 6E 67 5F 31 5F 00 5F 00 49 4E 00 0A 00 00 00 72
Lungime: 27 OK, dar s-a alterat continutul dupa NULL

S  t  r  i  n  g  _  1  _
53 74 72 69 6E 67 5F 31 5F
Lungime:9, trebuia sa fie 20, dar e trunchiat de la NULL



In C, unde apare primul '\0' intr-un string, acolo se considera terminat. Asta n-are treaba cu compilatorul, ci cu conventiile din bibliotecile standard. 

In fine, fa cum vrei.

