Wpis z mikrobloga

Hej, chciałem ukończyć funkcję logującą do ESP8266, ale mam głupi problem, a zarazem pewnie jest bardzo prosty do rozwiązania. Niestety nie mam już pomysłów i nawiasem mówiąc, nie mam pojęcia, dlaczego końcówka danych z końca jednej statycznej tablicy (originalStringToCharArray) nakłada się na początek danych w pustej tablicy (logs).
Może ktoś mnie oświeci.

Fragment kodu, którego dotyczy problem:

const int iloscLogow = 10;
const int dlugoscJednegoLogu = 100;
static char logs[iloscLogow][dlugoscJednegoLogu];
static char originalStringToCharArray[dlugoscJednegoLogu];

String str = "115588355_ghklfhryslnhgpwiahglwowoadktybnshprn_40__________________60________70________80________90_______100"
Serial.println("6: " + String(logs[0]));
strcpy(originalStringToCharArray, str.c_str());
Serial.println("6a: " + String(logs[0]));

Serial monitor:

6:
6a: 90_______100

#mikrokontrolery #nodemcu #esp8266 #esp #elektronika #programowanie #iot #arduino #elektryka @zetisdead
  • 4
@MisiekD: to jedna z cech biblioteki standardowej w językach C/CPP - strcpy kopiuje zawartość nie zwracając uwagi na długość (tzn czy się zmieści do bufora czy nie), jest odpowiednik który zwraca na to uwagę, strncpy. W twoim przypadku twój ciąg znaków ma długość 110 znaków, co jest większe niż 100. Ze względu na to jak przechowywane są zmienne w pamięci, znaki kopiowane są dalej, nadpisując zawartość kolejnej zmiennej.
@Oo-oO: ok, dzięki, tak właśnie myślałem :) Ale nie wiedziałem jak to uciąć. Natomiast najłatwiej to zrobić przy pomocy toCharArraty(buf, 100) - załatwia wszystko ;)