SORU
18 HAZİRAN 2009, PERŞEMBE


C, char, string değiştirmek mümkün mü?

Ben mücadele için bir kaç saat ile her türlü C dersler ve kitaplar ile ilgili işaretçileri, ama ne gerçekten bilmek istiyorum. eğer mümkünse değiştirmek için bir char işaretçi bir kez oldu yarattı.

Bunu denedim nedir:

char *a = "This is a string";
char *b = "new string";

a[2] = b[1]; // Causes a segment fault

*b[2] = b[1]; // This almost seems like it would work but the compiler throws an error.

Yani pointer adresleri yerine dizeleri içindeki değerleri değiştirmek için herhangi bir yolu var mı?

Teşekkürler

DÜZENLEME:

Teşekkürler cevaplar için herkese. Daha taşlar yerine oturmaya başladı. Özellikle iyi çalışıyor bazen çalışmıyor neden mantıklı. Bazen bir char pointer ve diğer zamanlarda char bir dizi geçmek istiyorum (char dizi gayet güzel çalıştı).

CEVAP
18 HAZİRAN 2009, PERŞEMBE


Yazdığında bir "string" in kaynak kodu alır yazılı doğrudan çalıştırılabilir, çünkü bu değer ihtiyaçları için bilinen derleme zamanında (orada araçları için çekme yazılımı ayrı ve tüm düz metin dizeleri onları). char *a = "This is a string", "Bu" yürütülebilir ve konumu bir puan için çalıştırılabilir. bir dize konumunu yazarken Yürütülebilir görüntü verileri salt okunur.

Diğer cevaplar belirttiği gibi () ne gerek yığında sadece okuyun, ya da yığın çerçevesi olmayan bir yerde bir bellek oluşturmak. Eğer bildirmek için bir dizi yerel, alan yapılan yığın için her elemanın dizi ve dize (kayıtlı çalıştırılabilir) kopyalanır bu alan içinde yığın.

char a[] = "This is a string";

ayrıca bu verileri el ile yığın bellek ayırma ve daha sonra strcpy() bir dize uzaya değişmez kopyasını kullanarak kopyalayabilirsiniz.

char *a = malloc(256);
strcpy(a, "This is a string");

Tahsis zaman alanı malloc() kullanarak bittiğinde free() (bellek sızıntısı) aramayı unutma.

Temel olarak, verilerinizi nerede olduğunu takip etmek zorunda. Ne zaman yazdığınız bir dize kaynağı, bu dize salt okunur (aksi olurdu potansiyel olarak değişen davranış yürütülebilir--hayal mı yazdın char *a = "hello"; ve sonra değişti a[0] 'c'. O zaman başka bir yere yazdım printf("hello");. Eğer ** 14, derleyici sadece saklı bir kere () ilk karakterini değiştirmek için izin verildi, 15 ** çıkış 16**! o zaman)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • JamesAtiPhone

    JamesAtiPhon

    16 EYLÜL 2010
  • Videogamerz | Call of Duty

    Videogamerz

    5 NİSAN 2012