David J. MALAN: Okazuje się, że kopiowanie ciąg nie jest tak proste jak kopiowanie prymitywne, jak int lub float. Wszakże pod maską ciąg jest ciągiem znaków. Więc kopiowanie ciąg, dlatego musi obejmować kopiowanie że całą sekwencję znaków. Zwróćmy uwagę, że z powrotem do Ostatnia realizacja i wyrwać to linia, łańcuch t jest równe S, który wyraźnie nie był wystarczający. Załóżmy, wymień go na linii, która wygląda, a nie, jak to. String t dostaje malloc długości string S Plus 1 razy rozmiar char. Teraz jest cytat nieco dzieje na w tej linii kodu. Po pierwsze, malloc, krótki dla pamięci alokacji, a funkcja właśnie to robi. Biorąc pod uwagę całkowitą, zwraca się do ciebie z adres kawałkiem pamięci że wiele bajtów. Tymczasem długość łańcuch s oraz 1 ma oznaczać, że ma co jak wiele bajtów, a zajmuje już w tym jego terminator zerowej odwrotny ukośnik 0 na końcu łańcucha. Tymczasem ja nie muszą pamiętać jak duży char jest, nawet choć w większości systemów jest to po prostu 1 bajt, więc zadzwonię do rozmiaru char dowiedzieć się, jak duże dynamicznie indywidualny charakter jest. Po pomnożone razem, wrócę Całkowita liczba bajtów, które muszę. Ale co, jeśli nie malloc przywrócić pamięć musimy? Chciałbym za to najlepiej sprawdzić w następujący sposób. Jeśli t jest równe NULL, to ja pierwszy będzie do bezpłatnych s, pamięć powróciła przez GET łańcuch, a następnie zamierzam zwraca 1, oznaczać błąd. Ale jeśli wszystko jest dobrze, mam zamiar kontynuować użycie czterech pętli i iteracyjne w następujący sposób. Dla int i dostać 0, n wynosi Długość ciąg s. Mam zamiar to zrobić, tak długo, jak jest mniejsza lub równa n, tak że iteracyjne się poprzez włącznie wartość null kończący znaków w s.. I na każdej iteracji, jestem zamierza zwiększyć i.. Tymczasem wewnątrz tej pętli, kopiować y jest i-ty znak w T i-th lokalizacja, wystarczy zrobić t Uchwyt i dostaje ów wspornik i.. Chciałbym dodać jeden dodatkowy najlepszym Linia do mojego kodu. W szczególności, ponieważ jestem teraz przy użyciu malloc, prosząc o pamięci, to moja odpowiedzialność, aby zwolnić tę pamięć kiedy skończę z nim, tak jak my powinno być zwolnienie pamięci, że jest nam dane przez GET ciąg. Tak na samym końcu tego programu, jestem zamiar dodać jedną dodatkową linię uwolnić t przed powrotem 0 do wskazania sukcesu. Załóżmy teraz zapisać, skompilować i uruchomić ten nowy program. Dodać 1 kropka slash kopia kopii 1. I powiem coś Witaj w całej małe. I na szczęście, tym razem moja oryginalne pozostaje niezmienione. Witaj w całej małe. Ale kopia jest, rzeczywiście, kapitalizowane.