SORU
2 EKİM 2008, PERŞEMBE


Neden ama " bir dize ile" başlatıldı; *s " char;; char s yazarken bölümleme hatası alıyorum[]"?

Aşağıdaki kod satırında 2 seg arıza alır:

  char *str = "string";
  str[0] = 'z';
  printf("%s", str);

Bu gayet iyi çalışır:

  char str[] = "string";
  str[0] = 'z';
  printf("%s", str);

MSVC ve GCC test.

CEVAP
2 EKİM 2008, PERŞEMBE


C SSS, Question 1.32 bkz

SBu başlatmaları arasındaki fark nedir?
char a[] = "string literal";
char *p = "string literal";
Benim program p[i] yeni bir değer atamak için çalışırsanız çöker.

BirBir dize (resmi terim değişmez C) çift tırnak içinde bir dize için kaynak) iki kullanılabilir biraz farklı yolu vardır:

  1. char a[] bildiriminde olarak char dizisi için başlatıcı başlangıç değerlerini belirtir gibi bu dizi ve karakterleri gerekli, boyut).
  2. Başka bir yerde, karakterleri isimsiz, statik bir dizi çevirir ve bu isimsiz dizi saklanabilir salt okunur bellek, ve hangi bu nedenle mutlaka edilemez değiştirilmiş. İfadesi bağlamında, dizinin bir kerede bir dönüştürülür işaretçi, her zamanki gibi (bkz Bölüm 6), ikinci bildirim başlatır p adlandırılmamış dizisinin ilk nokta eleman.

Bazı Derleyiciler anahtarı vardır kontrol edip dize hazır veya (derleme için eski yazılabilir değil Kodu), ve bazı seçenekler olabilir dize hazır resmen neden sabit karakter dizileri olarak tedavi için daha iyi hata yakalama).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • We've moved!

    We've moved!

    7 Ocak 2008
  • Showtime

    Showtime

    21 HAZİRAN 2006