Menu
Coddy logo textTech

strcpy() Kullanımı

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 16 / 63.

Dizelerin uzunluğunu strlen() ile nasıl bulacağınızı öğrendiniz, ancak bir dizenin içeriğini diğerine kopyalamanız gerekirse ne olur? C'de, dizeleri normal değişkenlerde yaptığınız gibi kopyalamak için atama operatörünü (=) kullanamazsınız.

Bunun nedeni, string'lerin karakter dizileri olmasıdır ve dizilerle = kullandığınızda, gerçek içeriği değil, yalnızca bellek adresini kopyalıyor olmanızdır. İşte bu noktada <string.h> kütüphanesindeki strcpy() fonksiyonu vazgeçilmez hale gelir.

#include <stdio.h>
#include <string.h>

char source[] = "Hello";
char destination[20];
strcpy(destination, source);  // "Hello" ifadesini destination içine kopyalar

strcpy() fonksiyonu iki argüman alır: hedef dizi (kopyalamak istediğiniz yer) ve kaynak dize (kopyalamak istediğiniz şey). Boş sonlandırıcı (null terminator) dahil olmak üzere her karakteri kaynaktan hedefe kopyalar.

Hedef dizinizin, kaynak dizginin tamamını ve boş sonlandırıcıyı (null terminator) tutacak kadar büyük olması çok önemlidir. Eğer hedef çok küçükse, strcpy() dizi sınırlarının ötesine yazacak ve belirsiz davranışa (undefined behavior) neden olacaktır.

Bu fonksiyon, C'de dize işleme için temeldir; dizeleri kopyalamanıza, dize değişkenlerini mevcut içerikle başlatmanıza ve dizeleri daha ileri işlemler için hazırlamanıza olanak tanır.

challenge icon

Görev

Kolay

strcpy() fonksiyonunu kullanarak dize kopyalamayı gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. Gerçekleştirilecek dize işlemi sayısını temsil eden bir n tam sayısı okuyun
  2. Her işlem için:
    • Girdiden bir kaynak dize (source string) okuyun
    • 100 elemanlı destination adında bir karakter dizisi (array) tanımlayın
    • Kaynak dizeyi hedef diziye kopyalamak için strcpy() kullanın
    • Hem orijinal kaynak dizeyi hem de kopyalanan hedef dizeyi yazdırın
  3. Tüm işlemlerden sonra, kopyalanan dizelerin bağımsız olduğunu şu şekilde gösterin:
    • Son hedef dizisinin ilk karakterini 'X' olarak değiştirin
    • Değiştiğini göstermek için değiştirilmiş hedef dizeyi yazdırın

strcpy() fonksiyonunu kullanmak için <string.h> başlık dosyasını eklemeyi unutmayın.

Çıktınız sonuçları aşağıdaki formatta görüntülemelidir:

Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]

Örneğin, girdi şu şekildeyse:

3
hello
world
programming

Çıktınız şu şekilde olmalıdır:

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

Bu görev, dize içeriklerini bir karakter dizisinden diğerine kopyalamak için strcpy() kullanımını, hedef diziler için uygun bellek ayırmayı ve kopyalanan dizelerin kaynaklarından bağımsız olduğunu anlama yeteneğinizi test eder.

Kopya kağıdı

C'de dizeleri kopyalamak için <string.h> kütüphanesinden strcpy() fonksiyonunu kullanın. Dizeleri kopyalamak için atama operatörünü (=) kullanamazsınız çünkü bu sadece bellek adreslerini kopyalar, gerçek içeriği değil.

#include <stdio.h>
#include <string.h>

char source[] = "Hello";
char destination[20];
strcpy(destination, source);  // "Hello" içeriğini destination içine kopyalar

strcpy() fonksiyonu iki argüman alır: hedef dizi (kopyalamak istediğiniz yer) ve kaynak dize (kopyalamak istediğiniz şey). Kaynaktaki her karakteri, boş sonlandırıcı (null terminator) dahil olmak üzere hedefe kopyalar.

Tanımsız davranışlardan kaçınmak için hedef dizi, tüm kaynak dizeyi ve boş sonlandırıcıyı tutacak kadar büyük olmalıdır.

Kendin dene

#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    
    char source[100];
    char destination[100];
    
    // YAPILACAK: Kodunuzu buraya yazın
    // n adet dize işlemini işlemek için bir döngü kullanın
    // Her işlem için:
    // - Kaynak dizeyi okuyun
    // - Kaynağı hedefe kopyalamak için strcpy() kullanın
    // - Her iki dizeyi de istenen formatta yazdırın
    
    // YAPILACAK: Döngüden sonra, son hedefin ilk karakterini değiştirin
    // ve değiştirilmiş dizeyi yazdırın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Logic & Flow bölümündeki tüm dersler