Merhaba, tekrar hoş geldiniz.
Tartışmamıza devam etmek istiyorum standart c kütüphanesindeki bazı fonksiyonlar
üzerinde.
Bunlar birçok işlevdir sınıfta konuşmuştuk ama size hatırlatmak
istedim.
Bu yüzden çok sayıda önemli c standart kütüphanesinden
çeşitli fonksiyonlar zaten tüm örneklerimizle ve tüm
kurs boyunca ele alınmıştır. öğrendiğimiz şeyler.
Hakkında çok konuştuk dize fonksiyonları.
Ve bazılarının kullanımı çok kolaydır ve bazılarını çok kullanacağız,
bu yüzden bunlara aşina olmalısınız.
Bu işlevlerden herhangi birini kullanmak için, başlık dosyası dizesini
eklemeniz gerekir. h, her şey string içinde tanımlanmıştır. h.
Str kedisi hakkında konuştuk.
Str cat iki dosyayı birleştirir dizeleri, aldığı iki parametre,
iki karakter işaretçisi.
Ve bir karakter döndürecektir işaretçisi diğeriyle birleştirilir.
Yani boş bir karakter yerleştirmek son dizenin sonunda, işlev
s1 değerini döndürür.
Str char bu, bir bir karakter içeren dize.
Bu, bir karakter yıldızı da.
Arama yapmak için iyi bir yol.
Bu konu hakkında epey konuştuk. Biraz da ip kedisiyle.
Str karşılaştırma gidiyor iki dizeyi karşılaştırmak için.
Bunu yapmanın standart yolu budur.
İki işaretçi alır ve bir tamsayı döndürür.
Bu konuda bazı örneklerimiz var burada temel olarak sıfır döndürürseniz
iki dizge eşittir.
Daha büyük veya daha küçük döndürürsek
sıfırdan büyükse, bu s1'in genellikle alfabetik boyutta daha büyük.
Yani eğer bir dize iletirseniz a içeriyorsa ve ikinci dize b ise,
büyüktür sonucunu döndürür. sıfır olur çünkü ya da a, b'den küçük olduğu için sıfırdan
küçük olur.
İlk olarak b'yi geçtiyseniz parametresi ve c ikinci parametre
bir tür dize b veya c ile başlarsa sıfırdan büyük
değer döndürür.
Yani anlamalısın ki bu dönüş değerleri.
Önemli olan da budur.
Anlaşıldı.
Bu şekilde atama yapabilirsiniz bir dizeyi başka bir dizeye dönüştürür.
Unutmayın, dizeler, işaretçiler ve karakter dizilerinde,
dizeyi doğrudan atayamazsınız atama operatörünü kullanarak.
Tamsayılar ve kayan sayılar için şunları yapabilirsiniz sadece eşittir operatörlerini kullanın.
Bunu tellerle yapamazsın.
Bu yüzden str copy kullanmanız gerekir Bir dizeyi bir işaretçiye, karakter işaretçisine veya karakter
dizisine atamak istediğinizde.
Bir karakteri başlatabilirsiniz çift tırnak içinde dizi değişmez
dizesi sabiti.
Ama ondan sonra ilklendirmesini değiştirmek isterseniz,
str kopyasını kullanmanız gerekecektir.
Str uzunluğu.
Bir diğer önemli işlev bir dizenin uzunluğunu alır.
Bu, bir t boyutu döndürür. uzunluğu temsil eden tamsayı.
Tüm bu dize işlevleri parametre olarak işaretçi veya karakter
dizileri alır.
Bu yüzden anlamamız gereken nasıl çalıştığını da.
Diğer dize işlevi strncat.
Tüm fonksiyonları hatırlayın bunun yerine sonunu eklemek biraz daha
güvenlidir çünkü tampon taşmaları yoktur.
Yani strncat'te üçüncü parametre eklenir ve bu, şu kadar parametreyi kopyala
veya birleştir diyecektir.
Genellikle üçüncü parametre ilk parametrenin boyutu
olacak çünkü Bundan daha büyük bir şeyi kopyalamak için.
Bu işlevler şu şekilde olmalıdır diğer dize
işlevleri üzerinde kullanılır çünkü bunlar arabellek taşması için güvenli.
Strn karşılaştır.
Tekrar ediyorum, belirli s1 ve s2 için karakter sayısı.
Strn kopyalama, burada üçüncü parametre ucu muhtemelen s1'in str uzunluğu
veya boyutu olacaktır.
Çünkü s2'yi kopyalayacaksınız ve s1, ancak s1'in tutabileceğinden veya depolayabileceğinden
daha fazla bayt kopyalamak istemezsiniz.
Str char.
Burası arama yapabileceğiniz yerdir bir karakterin son geçtiği
dizeyi bulur.
Fark ettiyseniz bu çok veya str karakterine benzer, burada fazladan
bir r vardır.
Bu yüzden ilk dönen yerine oluştuğunda, bu son oluşumu
döndürecektir, ancak siz diğeriyle aynı şekilde.
Str str.
Bu bir dize arayacak.
Yani bu bir arama fonksiyonudur esasen bir dizenin içindeki bir
alt dizeyi bulmaya çalışıyorsunuz.
Yine iki karakter işaretçisi alıyoruz.
Strtok.
Bu önemli bir işlevdi. verileri ayrıştırmaya yardımcı olabilir.
Strtok sınırlayıcıyı şu şekilde alır ikinci parametre ve bu sınırlayıcı
karakteri arayacaktır dizenin içinde herhangi bir yerde.
Genellikle şöyle bir şey kullanırsınız s2 için bir boşluk veya satır beslemesi.
Dizeyi şu parçalara ayıracaktır bir dizi farklı belirteç.
Yine, istediğiniz zaman kullanın genellikle verileri ayrıştırmak için.
Strtok'u her çağırmak zorunda kaldığınızda null olana
kadar birden çok kez, eğer hala Belirli bir dizede bulmak istediğiniz sonraki
tok'u arar.
Ayrıca bazı önemli karakter fonksiyonları.
Tüm karakter fonksiyonları ctype içinde tanımlanmıştır. h.
Karakter fonksiyonları bir karakterin karakter olup olmadığını kontrol
eden is fonksiyonlarıdır. alfanümerik mi yoksa boş mu olduğu ya
da bir kontrol mü olduğu Bir rakam karakteri, orada bir
dizi farklı işlev vardı.
Bu yüzden ctype'ı unutmayın. h izin verir Bu farklı karakterlerin gerçekte ne
olduklarını kontrol etmemiz gerekiyor.
Ayrıca bazı dönüştürme fonksiyonlarımız da vardı ctype'da. h, özellikle iki üstümüz.
İki alt karakter alır ve bu c'nin küçük harf
eşdeğerini verecektir.
Hatırlayın, bir yarışmamız vardı. küçük harfleri büyük harfe dönüştürdük.
Bu mücadelede, aslında 'yi ASCII tablomuza ekledik, ancak karakter
üzerinde iki üst çağırabilirdik.
Etrafına iki tane kurabilirdik. ctype'ı dahil ettiğimiz
sürece karakter. h'ye dönüşecek ve bu da küçük harften büyük harfe.
Bir sürü IO'muz vardı. fonksiyonları, giriş ve çıkış.
Okumaya odaklandık ve dosya yazıyorduk, ama aynı zamanda
klavyeden girdi okuyorduk ve çıktı alıyorduk verileri konsola veya ekrana aktarır.
Yani en yaygın IO'yu kullanmak için fonksiyonları, hepsi standartta
var. h başlık dosyası.
Bu dosyada, aşağıdakiler için bildirimler bulunur gibi sabitler
için tanımların yanı sıra farklı IO işlevleri dosya sonu, standart çıktı ve standart hatada
null standardı.
Bunların hepsi sabit değerlerdir.
için de bir sabit vardır dosya yapısı dosyası.
Fclose bir fonksiyon olup derelerimizi kapatmak için kullanılır.
Dosyayı kapatır dosya işaretçisi tarafından tanımlanır.
Ve sıfır döndürür, eğer başarılı bir şekilde kapatın, aksi takdirde eof.
Feof, bu bizim yapmadığımız bir işlev. açıkça kullanın, ancak bu sonda olup olmadığınızı
kontrol edecektir bir sabitle karşılaştırmak yerine bir
feof yapabilirsiniz.
Fflush.
Bu, aşağıdakileri temizleyecek bir fonksiyondur dahili tamponun tüm verileri.
Bazen bunu yapmanız gerekir baştan başlamak istediğinizde, ama temelde sadece
kurtuluyorsunuz bir tampon içindeki herhangi bir şeyin.
Ayrıca fgetc var.
Bu bireysel okuma karakterleri, bir dosya işaretçisi alır.
Fget pozisyonumuz var.
Bu bazı pozisyon fonksiyonları.
Geçerli dosya konumunu alır dosya işaretçisi
ile ilişkili dosyayı arar ve depolar standart io'da tanımlanan bir f pozisyon
tipinde. aynı zamanda.
Fget'lerimiz vardı.
Bu dizeler halinde okunuyordu.
Çok güzel, karakterleri okuyor belirtilen dosyadan, ancak
karakter sayısı.
Fopen bir dosyayı bir özel mod: bir dosya işaretçisi kullanarak
okuma, yazma veya ekleme.
Fprintf veri yazacak ve biçimlendirilmiş çıktısını alacaktır ve printf fonksiyonuna benzer şekilde
işaretçi tarafından belirtilen argümanları ve ardından yazmak için biçimlendirilmiş
verileri kullanın.
Böylece tamsayıları, çiftleri biçim belirleyicileri ve ardından yazmak istediğiniz
değişkenleri kullanarak.
Ayrıca fputc vardı, bu da karakterleri bir dosyaya yazın.
Fputs bir dosyaya bir dize yazacaktır.
Bir tampon ve bir dosya alır ne yazmak istediğinizi ve hangi dosyaya yazmak
istediğinizi işaretleyin.
Fscanf bir dosyadan veri okuyacaktır.
Girdiyi alacak ve scanf'in alacağı biçimle aynı biçimi kullanacaktır
biçim belirticileri ve değişkenleri.
Ama bu çok hoş. boşluk ile ayrılmış verileri okuyun.
fscanf kullanabilir ve şunları belirtebilirsiniz türünü doğrudan ints, double
ve belirli veri türlerine okuyabilirsiniz.
Fseek pozisyonunu değiştirecek. bir dosyada nereye işaret ettiğinizi belirler.
Bu yüzden en baştan başlamak zorunda değilsiniz. bir dosyanın başlangıcı veya sonu.
Doğrudan şu adrese gidebilirsiniz dosyanın ortasında.
Bu pozisyonu aradıktan sonra Bir sonraki okuma veya yazma işlemi, yazmak veya
okumak için bu konumu kullanacaktır.
Fset konumu fseek ile benzerdir.
Geçerli dosya konumunu ayarlar değerine
dosya işaretçisi ile ilişkili dosyada f konumu tarafından işaret edilen, fpos.
Fell de vardı.
Ftell nasıl geri dönecek? Dosya işaretçisine göre başlangıçtan
itibaren kaç bayt olduğunuz.
Bu yüzden, bu bölgedeki her zaman başlangıçtan değil, geçerli konumdan
itibaren baytlar, ancak mevcut konum.
Ftell'i şu ürünlerimizden birinde kullanıyoruz bir dosyayı tersten okumak için zorluklar.
Printf.
Bunu muhtemelen daha fazla kullanıyoruz diğer tüm işlevlerden daha fazla.
Bu görüntüleniyordu ekrana çıktı verir.
Biçim belirticilerini kullanır ve virgüllerle ayrılmış
değişken sayıda argüman.
Printf hata ayıklama için çok kullanışlıdır ve bir c programının içinde oldukça
fazla yaptığınız çıktıyı görüntülemek.
Kaldır.
Remove bir fonksiyondur, burada bir dosyayı silebilirsiniz.
Bir dosya adı alır.
Dosya işaretçisi kapatılmalıdır.
Açık bırakamazsın.
Yeniden Adlandır, bir dosyayı diğer dosyanın da kapatılması gerekir,
dosya açılamaz.
Scanf girdiyi şuradan okuyacaktır genellikle klavyeden varsayılan olarak.
Girişi okumak için değiştirebilirsiniz Eğer isterseniz diğer akışlardan.
Ayrıca şu dönüşüm fonksiyonlarımız da vardı kurs boyunca tartıştık.
Bu fonksiyonların çoğu standart lib. h dosyası, başlık dosyası.
Atof fonksiyonumuz vardı.
Bu, bir dizeyi bir float, ve siz onu bir dize olarak geçirirsiniz.
atoi fonksiyonlarımız var.
Bu dönüştürme bir dizesini bir tamsayıya dönüştürür.
Atol bir dizeyi bir uzunluğundadır ve dizeyi iletirsiniz
ve geri dönüş dönüştürdüğünüz yöntem.
Bunlar çok faydalı.
Genellikle bunları dönüştürmek için kullanırsınız dizelerini bir tür sayı türüne dönüştürür.
Atoll bunu bir long long int'ye dönüştürür.
Ama şu adrese baktığınızdan emin olun daha fazla dönüştürme işlevi için
standart lib başlık dosyası.
Hafıza fonksiyonlarımız vardı. dinamik bellek ayırma işlevleri.
Bunlar gerçekten önemli.
Dinamik bellek tahsisi önemlidir çünkü çok daha verimli.
Siz sadece ihtiyacınız olan hafıza.
Statik veri oluşturmazsınız.
Programınıza izin verir çok daha esnek olmak için.
Tüm bu işlevler standart kütüphanenin içinde yer alır. h.
Calloc hakkında konuştuk.
Calloc, aşağıdaki durumlarda harika bir işlevdir belirli bir boyut
tahsis edebilirsiniz ve bu n ile çarpılır.
Böylece veri türünü belirtebilirsiniz ve onu çoğaltacaktır.
Calloc hakkında güzel bir şey, verilerinizi başlatır.
Bu yüzden malloc'a göre gerçekten tercih edilir.
Serbest fonksiyonumuz var bu da hafızayı silecektir.
Tüm bu anılar yığın üzerinde oluşturulacak.
Bu yüzden sık sık buralarda olacağız. daha uzun, ancak bu belleği yönetmek
bir programcı olarak size kalmış.
Her zaman kendini özgür bırakmak istersin. bellek kıt bir kaynak olduğu
için onu kullanmayı bitirdikten sonra kaynak olarak kullanılıyor ve biz bu belleği kullanmak
istiyoruz.
Bu yüzden her zaman ücretsiz arayın calloc veya malloc yaparsınız.
Malloc daha basit bir bellek yaratma versiyonu.
Bu aslında herhangi bir veriyi başlatın.
Sadece boyutu bir parametre olarak alır.
Boş bir yıldız döndürür.
Bu yüzden her zaman atmanız gerekir tıpkı calloc ile işaret ettiğiniz
bellek türünde olduğu gibi.
Eğer int veya şamandıra, bunu atmak zorundasın.
Ayrıca realloc'umuz da var.
Realloc harika çünkü şunları yapabilirsiniz aslında mevcut belleğe ekleme yapar.
Ve bu şekilde senin bellek dinamik olabilir.
Aşağıdaki durumlarda daha büyük yapabilirsiniz daha fazla veri depolamak istiyorsanız.
Realloc, boyutta bir işaretçi alır.
Tüm verileri saklayacak önceki hafıza işaret ediyordu.
Yeni bellek tahsis edecek ancak onu saklayacaktır, böylece mevcut
belleğe ekleme yapabilirsiniz.
Çok, çok faydalı.
Dinamik olarak bellek oluşturmada tüm programlarınızda gerçekten yararlı olacaktır çünkü
özellikle İşaretçiler çok çok önemlidir, çok daha
verimlidirler.
Ama her şeyi anladığınızdan emin olun Bu başlık dosyalarını kurs boyunca
kullanacağız.
Bunlar başlıca şunlardır çok ama çok önemlidir.
Bu bölümde bazı yenileri hakkında konuşacağız. Sonraki birkaç derste
istediğim kadar tartışamadık.
Ama bunlar bazı önemli olanlar da var.
Teşekkür ederim.