strcpy() Kullanımı
Coddy'nin C Journey'sinin Mantık & Akış 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 kopyalarstrcpy() 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.
Görev
Kolaystrcpy() işlevini kullanarak dize kopyalamayı gösteren bir C programı yazın. Programınız şunları yapmalıdır:
- Gerçekleştirilecek dize işlemlerinin sayısını temsil eden bir tam sayı
nokuyun - Her işlem için:
- Girdiden bir kaynak dize okuyun
- 100 elemanlı,
destinationadlı bir karakter dizisi tanımlayın - Kaynak dizeyi hedef dizisine kopyalamak için
strcpy()kullanın - Hem özgün kaynak dizeyi hem de kopyalanan hedef dizesini yazdırın
- Tüm işlemlerden sonra, kopyalanan dizelerin bağımsız olduğunu göstermek için:
- Son hedef dizisinin ilk karakterini 'X' olarak değiştirin
- Değiştirildiğini göstermek için değiştirilmiş hedef dizesini yazdırın
<string.h> işlevini kullanmak için strcpy() başlığını eklemeyi unutmayın.
Çıktınız aşağıdaki biçimde sonuçları göstermelidir:
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: XrogrammingBu görev, dize içeriğini bir karakter dizisinden diğerine kopyalamak için strcpy() kullanımını, hedef dizileri için uygun bellek ayırmayı anlamanızı test eder ve kopyalanan dizelerin kaynaklarından bağımsız olduğunu gösterir.
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;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String FonksiyonlarıKendi başına pratik yap: Online C derleyicisi