Hoe alle elementen van array in C wissen?

De buffervariabele moet altijd worden gebruikt in de microcontroller, dus ik heb vluchtige statische gegevens gebruikt en het is een globale variabele.
Maar om de hele buffer duidelijk te maken, is het juist om op deze manier te coderen? Als het fout is of als er een andere eenvoudige code is, laat me dan een eenvoudige code zien.

Ik heb gehoord dat als ik het duidelijk wil maken, het makkelijker zou zijn om het eerste element gewoon leeg te maken. zoals dit: buffer[0] = ‘\0’;
Maar als ik het zo codeer, blijven er nog andere elementen over.

Ik weet dat het een heel simpele vraag is.
Maar ik ben in de war. Ik programmeer normaal gesproken in C++ of Java, dus het is nogal verwarrend voor mij om in C te programmeren.


Antwoord 1, autoriteit 100%

Uw gebruik van strlen()is verkeerd, dat hangt ervan af of de inhoud van de buffer een geldige tekenreeks is; het wist niet de hele buffer.

Gebruik gewoon memset()met sizeof:

memset(buffer, 0, sizeof buffer);

Merk op dat sizeofgeen functie is, dus er zijn geen haakjes nodig (of zouden naar mijn mening moeten worden gebruikt) voor gevallen als deze.

Als uw C-bibliotheek memset()niet bevat, kan natuurlijk een gewone lus worden gebruikt:

for(size_t i = 0; i < sizeof buffer; ++i)
  buffer[i] = 0;

Als je alleen het gebruikte gedeelte wilt wissen en weet dat het een geldige tekenreeks is, werkt je code natuurlijk. Ik zou waarschijnlijk geen backwards looping hebben gebruikt, omdat ik dat niet intuïtief vind, maar dat ben ik gewoon.

Opmerking: als deze buffer voor strings is, moet deze worden gewijzigd om het type charte hebben, niet uint8_t.


Antwoord 2, autoriteit 50%

memset(buffer, 0, sizeof(buffer));

Antwoord 3, autoriteit 30%

Het toewijzen van ‘\0’ aan het eerste element van de tekenreeks is voldoende om er een lege tekenreeks van te maken, maar de hele reeks wordt niet gewist.

Om te wissen moet je

memset(buffer, 0, sizeof(buffer));

of

bzero(buffer, sizeof(buffer));

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes