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

  • BeginnersTech

    BeginnersTec

    8 NİSAN 2011
  • CZTUTORIALS

    CZTUTORIALS

    28 Ocak 2011
  • Nightmare2005

    Nightmare200

    14 Ocak 2007