Sınıflarımdan biri için bir ev ödevi sorusunu yanıtlamam gerekiyor. Özellikle, C'deki belirli dizilerin dize olarak kabul edilip edilmediğini söylemeliyim. Bu makaleye dayanarak ( https://www.geeksforgeeks.org/strings-in-c-2/ ) Dizelerin sonunda boş sonlandırıcılı bir dizi karakter olduğunu biliyorum.
Benim ana hangup soruya benziyor bir dizi soran bir parçasıdır:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
Bu, sonunda boş bir sonlandırma karakteri olan bir karakter dizisidir. Bununla birlikte, ortasında boş bir sonlandırma karakteri olduğu için hala bir dize olarak kabul ediliyor mu? Bu ipi nasıl etkiler?
DÜZENLEME: Yorumlara dayanarak, sorunun gerçek ifadelerini sağladım:
Msgstr "Aşağıdaki dizilerden hangisi strcpy (), strncpy (), strcmp (), strncmp () ve benzer dize işlevlerine argüman olarak kullanmak amacıyla" dizeler "olarak kabul edilebilir (tüm uygulamaları belirtin)?"
DÜZENLEME: Soru belirsiz bir şekilde ifade edildiğinden beri profesörüme e-posta gönderdim (birkaç kişinin işaret ettiği gibi). Merak eden biri varsa, bana "Evet, bir dize. Anahtar, boş bir karakter olması. Ama elbette, herhangi bir dize işlemini etkileyecektir; dize null karakterle biter."
strcmp()
. Dize işlevlerini değiştirmeye argüman olarak kullanılıp kullanılamayacağı, sağlanmayan ek faktörlere bağlıdır.
c1
değiştirilebilir, bu yüzden neden strcpy
kaynak dizesini barındırmak için yeterince büyük olmadığı sürece geçerli bir hedef bağımsız değişken veya benzer için başarısız olacağını görmüyorum . Bu bir ip değil, belirli bir amaç için uygun bir ip değil.
c1
, özel olarak adlandırılanlar da dahil olmak üzere tüm standart kitaplığın (dar) dize işlevlerine yönelik dize bağımsız değişkenleri için temel gereksinimleri karşılar, ancak davranış, arayanın beklediği veya istediği şey olmayabilir (hatta ortaya çıkarılabilen tanımlanmamış davranışları göz ardı ederek).
char
. Herhangi bir karakter türü yapar.
"CS"
Birkaç baytlık çöp eklenmiş bir dize olduğunu söyleyebilirsiniz (bu durumda son NUL karakteri önemsizdir). Ama "bütün olarak" bir dize değildir. - Yine de,strcpy
bu işlevler vb "Bu"CS"
kısmı sadece görmek" çünkü pc patlamaya yapmayacaktır .