Problemy z twoim podejściem.
C ciągów musi kończyć się 0 bajtów, czyli innymi słowy '\0'
charakter. Używanie ""
dodaje automatycznie, ale poza tym musisz dodać to sam, a wszystkie funkcje ciągu zależą od tego, że jest tam 0.
Twoja v tablica zawiera znaki, a nie łańcuchy, a strcat
przyjmuje ciągi.
Jedno rozwiązanie:
char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);
ta zamienia tablicę char do tablicy wskaźników do ciągów C.
Należy również zadbać o to, aby zawierał wystarczająco dużo miejsca, aby pomieścić wszystko, co do niego dodasz za pomocą polecenia strcat (tutaj to robi). Zwykle najlepiej jest używać snprintf
do łączenia ciągów, ponieważ pobiera on całkowity rozmiar docelowej tablicy , w tym, kończąc wartość null, i dodaje, że zawsze tam jest zerowa, więc trudniej jest zepsuć. Przykład z oryginalnej tablicy char:
char cmd[50] = "some text here";
char buf[50];
char v[] = {'a','s','d','c','b'};
snprintf(buf, sizeof buf, "%s%c", cmd, v[3]);
Uwagi: sizeof jak to działa tylko wtedy, gdy buf
naprawdę jest tablicą, oświadczył z []
jak tutaj. Również z snprintf, użycie tego samego bufora zarówno jako argumentu docelowego, jak i formatu może dać nieoczekiwane wyniki, więc dodałem nową docelową zmienną bufora.
Jeszcze snprintf przykład ze swoich pierwotnych dwóch tylko tablic, dołączając do końca bieżącej zawartości cmd:
snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);
więc wyraźnie, w tym konkretnym przypadku, strncat(cmd, &v[3], 1)
sugerowane w innych odpowiedzi, aby dodać 1 znak jest o wiele ładniejszy, ale zaletą snprintf jest możliwość dodania wszystkich typów danych obsługiwanych przez printf, a nie znaków.
Dziękujemy! Czy mogę zadbać o to, aby cmd [] zawierało wystarczającą ilość miejsca, która jest według Ciebie NAJSZYBSZY? – redgiun
strncat to prawdopodobnie najszybszy z nich, ale najszybszy to 'int len = strlen (cmd); cmd [len] = v [3]; cmd [len + 1] = 0; '. Zwróć uwagę, że indeksowanie tablicy zaczyna się od 0, więc 'some_cstring [strlen (some_cstring)]' jest zawsze 0. – hyde
dziękuję. to było przydatne – redgiun