SORU
9 Mart 2011, ÇARŞAMBA


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
9 Mart 2011, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • metallmanutza13

    metallmanutz

    13 NİSAN 2007
  • steeletraining

    steeletraini

    28 NİSAN 2010

İLGİLİ SORU / CEVAPLAR