Menu
Coddy logo textTech

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 destination

Funkcja 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.

challenge icon

Wyzwanie

Łatwy

Napisz program w języku C, który demonstruje kopiowanie ciągów znaków za pomocą funkcji strcpy(). Twój program powinien:

  1. Wczytać liczbę całkowitą n, która określa liczbę operacji na ciągach znaków do wykonania
  2. Dla każdej operacji:
    • Wczytać ciąg źródłowy z wejścia
    • Zadeklarować tablicę znaków o nazwie destination zawierają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
  3. 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
programming

Wynik powinien być następujący:

Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: Xrogramming

To 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;
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator C online