Güvenli işlev, hedef'in(0,0,0) gerçekleştirmek için garanti edilir?
Çok bilgili C standardı, bu yüzden lütfen beni mazur görün değilim.
memcpy(0,0,0)
güvenli, standart tarafından, garanti olup olmadığını bilmek istiyorum.
Bulabildiğim tek kısıtlama ise, bellek bölgeleri üst üste gelirse, o zaman davranışı tanımlı değil
Ama biz bellek bölgelerde üst üste geldiğini düşünebilirsiniz ?
CEVAP
C standardı (IEC 9899:1999 ISO/) taslağı var ve bu çağrı için çok eğlenceli şeyler var. Yeni başlayanlar için, (&Mezhebi;7.21.1/2) memcpy
gelince o bahseder
Tartışma
size_t
n olarak bildirilen bir dizi uzunluğunu belirtir işlevi, n değeri bu işlev çağrısı sıfır olabilir. Açıkça belirtilmediği sürece aksi takdirde bu alt başlık içinde belirli bir işlevi açıklamasında,işaretçi değişkenler böyle bir çağrı hala 7.1.4 açıklandığı gibi geçerli bir değer ifade eder. Böyle bir çağrı, bir bir karakteri bulur işlevi yok oluşumu, iki karşılaştıran bir işlev bulur karakter dizileri sıfır ve kopya karakterleri kopyalayan bir fonksiyon sıfır döndürür karakterler.
Başvuru burada bu noktaları işaret etti
Bir işlevin bir bağımsız değişkeni geçersiz bir değere sahiptir (bir değer gibi fonksiyonun etki alanı veya programı adres alanı dışında bir işaretçi,dış ya da boş bir işaretçiya da bir işaretçi-değiştirilebilir olmayan depolama ne zaman ile ilgili parametre sabit nitelikli) veya bir tür (tanıtım sonra) işlevi tarafından beklenen bağımsız değişken bir sayı iledavranışı tanımlı değil.
C spec göre, arama
memcpy(0, 0, 0)
tanımsız davranış, null işaretçiler çünkü sonuçlar "geçersiz değer." olarak kabul edilir
O söyledi, Ben tamamen hayret olurdu eğer herhangi bir gerçek uygulama memcpy
kırdı eğer yaptığın bu yana en sezgisel uygulamaları düşündüğüm yapardı hiçbir şey olmadığını söylemiştin kopyalamak sıfır bayt.