SORU
23 Mart 2011, ÇARŞAMBA


Bir dize scanf ile okuma

Biraz bir konuda kafam karıştı. Scanf ile C bir dize okuma doğru yol olduğunu sanıyordum() çizgisinde gitti

(hiç olası arabellek taşması, sadece basit bir örnekti)

char string[256];
scanf( "%s" , string );

Ancak, aşağıdaki çok iş gibi görünüyor

scanf( "%s" , &string );

Bu sadece benim derleyici (gcc), saf şans, yoksa başka bir şey mi?

Şimdiden teşekkürler

CEVAP
23 Mart 2011, ÇARŞAMBA


Bir dizi "çürük scanf("%s", string) scanf("%s", &string[0]) eşdeğerdir yani" ilk öğe için bir işaretçi içine. Diğer taraftan, scanf("%s", &string) geçer ama aynı yeri işaret ediyor--char[256] işaretçi.

O zaman bağımsız değişken listesinde kuyruğu işlerken scanf,, char * bir çıkarmaya çalışacağız. Doğru zaman var geçti string &string[0] ama ne zaman oldun geçti &string sensin bağlı bir şey bu dil standart garantilemez, yani işaretçiler &string &string[0] -- işaretçiler nesnelerin farklı türleri ve boyutları bu başlangıç aynı yer ... ... temsil aynı şekilde.

Şimdiye kadar hangi işe yaramayacak bir sistem karşılaştığım inanmıyorum, ve muhtemelen uygulamada güvendesin. Hiçbiri az, yanlış ve bazı platformlarda başarısız olabilir. (Farazi bir örnek: "" her işaretçi tip bilgileri içeren bir uygulama. hata ayıklama Bendüşünüyorumbu C uygulaması "Lisp Makineleri" böyle bir şey yaptı.) Symbolics

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008