Miej tablicę znaków, takich jak członkowie znaków [255]. Jak mogę go całkowicie opróżnić bez używania pętli?
char members[255];
Przez „pusty” rozumiem, że gdyby zawierał jakieś wartości, to nie powinien. Na przykład, jeśli zrobię strcat, stara wartość nie powinna pozostać
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
string
. Aby „opróżnić” ciąg, ustaw jego pierwszy element na „\ 0”:members[0] = '\0';
Odpowiedzi:
za pomocą
memset(members, 0, 255);
ogólnie
memset(members, 0, sizeof members);
jeśli tablica jest w zakresie, lub
memset(members, 0, nMembers * (sizeof members[0]) );
jeśli masz tylko wartość wskaźnika, a nMembers to liczba elementów w tablicy.
EDYCJA Oczywiście, teraz wymaganie zmieniło się z ogólnego zadania czyszczenia tablicy na czyste resetowanie ciągu,
memset
jest przesadą i wystarczy wyzerować pierwszy element (jak zauważono w innych odpowiedziach).EDIT W celu wykorzystania memset , trzeba to string.h .
źródło
Zależy od tego, co masz na myśli mówiąc „pusty”:
members[0] = '\0';
źródło
Nie przejmuj się próbą wyzerowania tablicy znaków, jeśli masz do czynienia z łańcuchami. Poniżej znajduje się prosty sposób pracy z ciągami znaków.
Kopiuj (przypisz nowy ciąg):
strcpy(members, "hello");
Concatenate (dodaj ciąg):
strcat(members, " world");
Pusta struna:
members[0] = 0;
Takie proste.
źródło
członkowie char [255] = {0};
źródło
EDYCJA: Biorąc pod uwagę najnowszą edycję pytania, nie będzie to już działać, ponieważ nie ma zakończenia zerowego - jeśli spróbujesz wydrukować tablicę, otrzymasz swoje znaki, a następnie kilka znaków nieczytelnych dla człowieka. Jednak zostawiam tę odpowiedź tutaj jako wiki społeczności dla potomności.
char members[255] = { 0 };
To powinno działać. Zgodnie z językiem programowania C:
Oznacza to, że każdy element tablicy będzie miał wartość 0. Nie jestem pewien, czy to jest to, co uważasz za „puste”, czy nie, ponieważ 0 jest prawidłową wartością a
char
.źródło
Nie można opróżnić tablicy jako takiej, ponieważ zawsze zawiera ona taką samą ilość danych.
W szerszym kontekście dane w tablicy mogą reprezentować pustą listę elementów, ale musi to być zdefiniowane dodatkowo do tablicy. Najczęstszym sposobem na to jest utrzymywanie liczby ważnych elementów (patrz odpowiedź przez pmg) lub ciągi kończące je znakiem zerowym (odpowiedź Felixa). Istnieją również bardziej skomplikowane sposoby, na przykład bufor pierścieniowy wykorzystuje dwa indeksy dla pozycji, w których dane są dodawane i usuwane.
źródło
members[0] = 0;
wystarczy, biorąc pod uwagę Twoje wymagania.
Zauważ jednak, że nie jest to „opróżnianie” bufora. Pamięć jest nadal przydzielona, mogą nadal istnieć w niej prawidłowe wartości znaków i tak dalej.
źródło
0
to ważny znak. Nie wiemy, czymembers
są traktowane jako string C, czy nie.Posługiwać się
bzero(array name, no.of bytes to be cleared);
źródło
Poszedłbym z
members_in_use = 0;
źródło
Mówiąc „opróżnij tablicę”, jeśli masz na myśli reset do 0, możesz użyć bzero.
#include <strings.h> void bzero(void *s, size_t n);
Jeśli chcesz wypełnić tablicę jakimś innym domyślnym znakiem, możesz użyć funkcji memset.
#include <string.h> void *memset(void *s, int c, size_t n);
źródło
prostsze jest lepsze - czy ma sens?
w tym przypadku tylko członkowie [0] = 0 działają. nie rób prostego pytania tak skomplikowanym.
źródło
Zrzeczenie się: Zwykle nie programuję w C, więc w moich przykładach mogą występować jakieś problemy ze składnią, ale mam nadzieję, że pomysły, które próbuję wyrazić, są jasne.
Jeśli „opróżnianie” oznacza „zawierający pusty ciąg”, możesz po prostu przypisać zeru pierwszemu elementowi tablicy, co skutecznie sprawi, że tablica będzie zawierać ciąg znaków empry:
members[0] = 0;
Jeśli „opróżnianie” oznacza „zwolnienie używanej pamięci”, w pierwszej kolejności nie należy używać stałej tablicy znaków. Zamiast tego powinieneś zdefiniować wskaźnik do char, a następnie odpowiednio wykonać malloc / free (lub przypisanie string).
Przykład wykorzystujący tylko statyczne ciągi:
char* emptyString=""; char* members; //Set string value members = "old value"; //Empty string value member = emptyString //Will return just "new" strcat(members,"new");
źródło
Możesz skorzystać z następującej instrukcji:
strcpy_s(members, "");
źródło