SORU
9 Temmuz 2013, Salı


Bu ise 2 c-string bellekte üst üste kontrol doğru ve taşınabilir bir yol var mı?

En etkili yolu olmayabilir, ama doğru ve taşınabilir mi?

int are_overlapping(const char *a, const char *b) {
  return (a   strlen(a) == b   strlen(b));
}

Netleştirmek için: aradığım şeyi tekrarlarbellekgerçek içeriği değil. Örneğin:

const char a[] = "string";
const char b[] = "another string";
are_overlapping(a, b); // should return 0
are_overlapping(a, a   3); // should return 1

CEVAP
9 Temmuz 2013, Salı


Evet, eğer kodu doğru mu? Eğer iki dize örnek yerde bitirmek eğer tanımı gereği onlar çakışan aynı null sonlandırıcı paylaşıyorlar. Ya iki dizge aynıdır, ya da diğer bir dize.

Program hakkında her şeyi mükemmel biçimde tanımlanmış davranışları, standartlarla uyumlu varsayarak, mükemmel taşınabilir olmalı Derleyiciler.

Standart ilgili biraz6.5.9 Eşitlik operatörleri(vurgu benim):

İki işaretçiler eşit ve karşılaştırınher ikisi de null işaretçilerher ikisi de aynı nesneyi işaret ederler(bir nesneye bir işaretçi ve kendi başına bir sınıfın da dahil olmak üzere) veya işlevher ikisi de aynı dizi nesnenin son öğe geçen bir işaretya da bir işaretçi için bir son sonunda bir dizi nesne ve başka bir işaretçi başlatmak farklı bir dizi nesne olur hemen izleyin ilk dizi nesne adres alanı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • Jaclyn W

    Jaclyn W

    5 Mayıs 2006