Używanie strcpy()
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 16 z 63.
Dowiedziałeś się, jak sprawdzać długość ciągów znaków za pomocą strlen(), ale co zrobić, jeśli chcesz skopiować zawartość jednego ciągu znaków do drugiego? W C nie możesz użyć operatora przypisania (=) do kopiowania ciągów znaków tak jak zwykłych zmiennych.
Powodem jest to, że ciągi znaków są tablicami znaków, a gdy używasz = z tablicami, kopiujesz tylko adres pamięci, a nie rzeczywistą zawartość. Właśnie dlatego niezbędna jest funkcja strcpy() z biblioteki <string.h>.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Kopiuje "Hello" do destinationFunkcja strcpy() przyjmuje dwa argumenty: tablicę docelową (do której chcesz skopiować) i ciąg źródłowy (to, co chcesz skopiować). Kopiuje każdy znak ze źródła do miejsca docelowego, łącznie ze znakiem null.
Kluczowe jest, aby tablica docelowa była wystarczająco duża, by pomieścić cały ciąg źródłowy wraz z terminatorem null. Jeśli tablica docelowa jest za mała, strcpy() zapisze dane poza jej granicami, powodując niezdefiniowane zachowanie.
Ta funkcja ma fundamentalne znaczenie dla manipulowania ciągami znaków w języku C. Umożliwia duplikowanie ciągów znaków, inicjowanie zmiennych przechowujących ciągi znaków istniejącą zawartością oraz przygotowywanie ciągów znaków do dalszego przetwarzania.
Wyzwanie
ŁatwyNapisz program w języku C, który demonstruje kopiowanie ciągów znaków za pomocą funkcji strcpy(). Twój program powinien:
- Wczytać liczbę całkowitą
n, która określa liczbę operacji na ciągach znaków do wykonania - Dla każdej operacji:
- Wczytać ciąg źródłowy z wejścia
- Zadeklarować tablicę znaków o nazwie
destinationzawierającą 100 elementów - Użyć
strcpy(), aby skopiować ciąg źródłowy do tablicy docelowej - Wyświetlić zarówno oryginalny ciąg źródłowy, jak i skopiowany ciąg docelowy
- Po wykonaniu wszystkich operacji zademonstrować, że skopiowane ciągi są niezależne, poprzez:
- Zmodyfikowanie pierwszego znaku w ostatniej tablicy docelowej na 'X'
- Wyświetlenie zmodyfikowanego ciągu docelowego, aby pokazać, że uległ zmianie
Pamiętaj, aby dołączyć nagłówek <string.h>, by móc użyć funkcji strcpy().
Wynik powinien być wyświetlony w następującym formacie:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]Na przykład, jeśli dane wejściowe to:
3
hello
world
programmingWynik powinien być następujący:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: XrogrammingTo wyzwanie sprawdza, czy rozumiesz używanie funkcji strcpy() do kopiowania zawartości ciągu znaków z jednej tablicy znaków do drugiej, prawidłową alokację pamięci dla tablic docelowych oraz to, że skopiowane ciągi są niezależne od swoich źródeł.
Spróbuj swoich sił
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: Napisz tutaj swój kod
// Użyj pętli do wykonania n operacji na ciągach znaków
// Dla każdej operacji:
// - Wczytaj ciąg source
// - Użyj strcpy(), aby skopiować source do destination
// - Wypisz oba ciągi w wymaganym formacie
// TODO: Po zakończeniu pętli zmień pierwszy znak ostatniego ciągu destination
// i wypisz zmodyfikowany ciąg
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online