Mam odpowiedzieć na pytanie o pracę domową dla jednej z moich klas. W szczególności mam powiedzieć, czy niektóre tablice w C są uważane za łańcuchy, czy nie. Na podstawie tego artykułu ( https://www.geeksforgeeks.org/strings-in-c-2/ ) wiem, że ciągi znaków to tablica znaków z zakończeniem zerowym na końcu.
Moje główne zawieszenie jest częścią pytania, które dotyczy tablicy, która wygląda następująco:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
Jest to oczywiście tablica znaków ze znakiem kończącym na zero na końcu. Czy jednak nadal jest uważany za ciąg, ponieważ ma również znak kończący na zero w środku? Jak to wpłynie na ciąg?
EDYCJA: Na podstawie komentarzy podałem rzeczywiste brzmienie pytania:
„Które z poniższych tablic można uznać za„ ciągi ”w celu wykorzystania ich jako argumentów funkcji strcpy (), strncpy (), strcmp (), strncmp () i podobnych funkcji ciągu (wskazać wszystkie obowiązujące)?”
EDYCJA: Wysłałem e-mail do mojego profesora na ten temat, ponieważ pytanie wydawało się dwuznacznie sformułowane (jak zauważyło kilka osób). Jeśli ktoś jest ciekawy, powiedział mi: „Tak, to ciąg znaków. Kluczem jest to, że istnieje znak zerowy. Ale oczywiście będzie to miało wpływ na wszelkie operacje na łańcuchach; łańcuch kończy się na znaku zerowym”.
strcmp()
. To, czy można go użyć jako argumentu do mutowania funkcji łańcuchowych, zależy od dodatkowych czynników, których nie podano.
c1
jest zmienna, więc nie rozumiem, dlaczego nie byłby prawidłowym argumentem docelowym strcpy
lub podobnym, chyba że nie był wystarczająco duży, aby pomieścić łańcuch źródłowy. To nie oznaczałoby, że nie byłby to sznurek, tylko nieodpowiedni do określonego celu.
c1
spełniałoby podstawowe wymagania dotyczące argumentów łańcuchowych dla wszystkich funkcji łańcuchowych biblioteki standardowej (wąskich), w tym wszystkich tych specjalnie nazwanych, ale zachowanie może nie być tym, czego osoba wywołująca oczekuje lub chce (nawet ignorując niezdefiniowane zachowania, które można wywołać).
char
. Wystarczy dowolny typ postaci .
"CS"
z dołączonymi kilkoma bajtami śmieci (w takim przypadku końcowy znak NUL nie ma znaczenia). Ale to nie jest ciąg „jako całość”. - Niemniej jednak karmienie tegostrcpy
itp. Nie spowoduje wybuchu komputera, ponieważ funkcje te będą „widzieć” tylko"CS"
część.