De juiste manier om een C-string te legen

Ik heb aan een project in C gewerkt waarvoor ik veel moet rommelen met snaren. Normaal programmeer ik in C++, dus dit is een beetje anders dan alleen string.empty() zeggen.

Ik vraag me af wat de juiste manier zou zijn om een string in C te legen. Zou dit het zijn?

buffer[80] = "Hallo wereld!\n";
// ...
strcpy(buffer, "");

Antwoord 1, autoriteit 100%

Het hangt ervan af wat je bedoelt met ‘leeg’. Als je alleen een string met een lengte van nul wilt, dan zal je voorbeeld werken.

Dit werkt ook:

buffer[0] = '\0';

Als u de volledige inhoud van de tekenreeks op nul wilt zetten, kunt u dit als volgt doen:

memset(buffer,0,strlen(buffer));

maar dit werkt alleen voor het op nul zetten tot het eerste NULL-teken.

Als de tekenreeks een statische array is, kunt u het volgende gebruiken:

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

Antwoord 2, autoriteit 3%

Twee andere manieren zijn strcpy(str, "");en string[0] = 0

Om de inhoud van de variabele echt te verwijderen (voor het geval je vuile code hebt die niet goed werkt met de bovenstaande fragmenten 😛 ), gebruik je een lus zoals in het onderstaande voorbeeld.

#include <string.h>
...
int i=0;
for(i=0;i<strlen(string);i++)
{
    string[i] = 0;
}

Als u een dynamisch toegewezen reeks tekens vanaf het begin wilt wissen,
je kunt ofwel een combinatie van malloc() en memset() gebruiken of – en dit is veel sneller – calloc() dat hetzelfde doet als malloc maar de hele array initialiseert met Null.

Eindelijk wil ik dat je je looptijd in gedachten houdt.
Sterker nog, als je met enorme arrays werkt (6 cijfers en hoger), moet je proberen de eerste waarde in te stellen op Null in plaats van memset() door de hele String te laten lopen.

Het ziet er in eerste instantie misschien vuiler uit, maar is veel sneller. Je moet gewoon meer aandacht besteden aan je code 😉

Ik hoop dat dit nuttig was voor iedereen 😉


Antwoord 3

Afhankelijk van wat je bedoelt met leegmaken. Als je alleen een lege string wilt, kun je dat doen

buffer[0] = 0;

Als je elk element op nul wilt zetten, doe dan

memset(buffer, 0, 80);

Antwoord 4

Als je een ontvangstbuffer probeert leeg te maken voor iets dat strings ontvangt, heb ik ontdekt dat de beste manier is om memset te gebruiken zoals hierboven beschreven. De reden is dat het niet uitmaakt hoe groot de volgende ontvangen string is (uiteraard beperkt tot de grootte van de buffer), het zal automatisch een asciiz-string zijn als deze in een buffer wordt geschreven die vooraf op nul is gezet.


Antwoord 5

Ik ben een beginner, maar… voor zover ik weet, is dit de beste manier

strncpy(dest_string,"",strlen(dest_string));

Antwoord 6

heeft de naam van de tekenreeks en de lengte nodig
zal alle tekens op nul zetten
andere methoden kunnen stoppen bij de eerste nul die ze tegenkomen

   void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i<len){p[i]=0;i++;}}
    }

Other episodes