Hoe een char-array leegmaken?

Heb een array van tekens zoals char-leden[255]. Hoe kan ik het volledig leegmaken zonder een lus te gebruiken?

char members[255];

Met ‘leeg’ bedoel ik dat als er enkele waarden in zijn opgeslagen, dat niet zou moeten. Als ik bijvoorbeeld strcat doe, mag de oude waarde niet blijven staan

members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"

Antwoord 1, autoriteit 100%

met

 memset(members, 0, 255);

in het algemeen

 memset(members, 0, sizeof members);

als de array binnen bereik is, of

 memset(members, 0, nMembers * (sizeof members[0]) );

als je alleen de pointerwaarde hebt, en nMembers is het aantal elementen in de array.


EDIT Natuurlijk is de vereiste nu veranderd van de generieke taak van het wissen van een array naar het puur opnieuw instellen van een string, memsetis overkill en alleen het op nul zetten van het eerste element is voldoende (zoals opgemerkt in andere antwoorden) .


EDIT Om memsette gebruiken, moet je string.hopnemen.


Antwoord 2, autoriteit 21%

Afhankelijk van wat je bedoelt met ‘leeg’:

members[0] = '\0';

Antwoord 3, autoriteit 5%

Doe geen moeite om je char-array op nul te zetten als je met strings te maken hebt. Hieronder ziet u een eenvoudige manier om met de tekenreeksen te werken.

Kopiëren (nieuwe tekenreeks toewijzen):

strcpy(members, "hello");

Concatenate (voeg de tekenreeks toe):

strcat(members, " world");

Lege string:

members[0] = 0;

Eenvoudig zo.


4, Autoriteit 4%

CHAR-leden [255] = {0};


5, Autoriteit 2%

U kunt een array als zodanig niet legen, deze bevat altijd hetzelfde aantal gegevens.

In een grotere context kunnen de gegevens in de array een lege lijst met items vertegenwoordigen, maar dat moet naast de array worden gedefinieerd. De meest gebruikelijke manier om dit te doen is door een telling van geldige items bij te houden (zie het antwoord van pmg) of voor strings om ze te beëindigen met een nulteken (het antwoord van Felix). Er zijn ook meer gecompliceerde manieren, een ringbuffer gebruikt bijvoorbeeld twee indices voor de posities waar gegevens worden toegevoegd en verwijderd.


Antwoord 6, autoriteit 2%

members[0] = 0;

is genoeg, gezien uw vereisten.

Merk echter op dat dit niet het “legen” van de buffer is. Het geheugen is nog steeds toegewezen, er kunnen nog geldige tekenwaarden in staan, enzovoort.


Antwoord 7, autoriteit 2%

Gebruik bzero(array name, no.of bytes to be cleared);


Antwoord 8

Ik zou meegaan

members_in_use = 0;

Antwoord 9

Als je met “een array leegmaken” bedoelt reset naar 0, dan kun je bzero gebruiken.

#include <strings.h>  
void bzero(void *s, size_t n);  

Als u de array wilt vullen met een ander standaardteken, kunt u de memset-functie gebruiken.

#include <string.h>  
void *memset(void *s, int c, size_t n);  

Antwoord 10

eenvoudiger is beter – logisch?

in dit geval werken alleen members[0] = 0.
maak een simpele vraag niet zo ingewikkeld.


Antwoord 11

Disclaimer:ik programmeer normaal gesproken niet in C, dus er kan een syntaxisfout in mijn voorbeelden zitten, maar ik hoop dat de ideeën die ik probeer uit te drukken duidelijk zijn.

Als “leegmaken” betekent “een lege tekenreeks bevatten”, kunt u het eerste array-item gewoon aan nul toewijzen, waardoor de array in feite een lege tekenreeks bevat:

members[0] = 0;

Als “leegmaken” betekent “het geheugen vrijmaken dat het gebruikt”, moet u in de eerste plaats geen vaste char-array gebruiken. In plaats daarvan moet u een aanwijzer naar char definiëren en vervolgens malloc / free (of tekenreekstoewijzing) uitvoeren zoals van toepassing.

Een voorbeeld waarbij alleen statische tekenreeksen worden gebruikt:

char* emptyString="";
char* members;
//Set string value
members = "old value";
//Empty string value
member = emptyString
//Will return just "new"
strcat(members,"new");

Antwoord 12

U kunt de volgende instructie gebruiken:

strcpy_s(members, "");

Antwoord 13

Ik had een soortgelijk probleem. Ik probeerde de resultaten van analoog naar digitaal weer te geven van een Char-type array. Het probleem was toen ik de Pot draaide om een lagere spanning of een lagere geconverteerde decimale waarde te krijgen, zoals 5 van tussen (1023 – 0), de lift over tekens uit de array bleef naast het getal 5. Ik gebruikte deze methode om de probleem:

LCD_Send_String(” “); \ gebruikte spaties als tekenreeks
LCD_Send_Command (LCD_THIRD_ROW); \Zet de cursor terug aan het begin van de regel.

Other episodes