Estağfurullah. Siz yanlış anladınız ya da ben eksik yazdım. Stringlerden kastımı biraz daraltıp anlattım, örneklerde görüldüğü gibi char *cptr = "DonanimHaber"; gibi stringlerdi. Doğrudan diziye atanan string ler tabiki değiştirilebilir. char c[] = "DonanimHaber"; gibi. Stringlerin program koduna gömüldüğünü de okumuştum ama yukarıdaki anlattığım undefined behaviour durumundan kesinlikle eminim. (Zaten kesin bilmediğim yerlerde özellikle belirtiyorum) Sonuç olarak sizin yazdığınız "char str[] = "DonanimHaber"; ifadesindeki stringi derleyici str nin gösterdiği yere yazar çünkü bilir ki str dizisi değişkendir ve içeriği değişebilmelidir." Buna zaten katılıyorum tersini de yazmadım. Bahsettiğim, char *str = "DonanimHaber"; in değiştirilmesinin undefined behaviour olduğuydu. (Hepsini yazayım da karışıklık kalmasın) const char *str = "DonanimHaber"; bunu zaten değiştirmeye kalkmak compile-time hatası. char str[] = "DonanimHaber"; istenilen şekilde değiştirilebilir. const char str[] = "DonanimHaber"; değiştirilemez const keyword ünden dolayı. Not: Belki gözünüzden kaçmıştır üstte birkaç mesaj daha var, onlara da bakabilirsiniz. |
Olsun tartışmak iyidir. Burada yazılanlar konuyla ilgili türkçe kaynaktır aynı zamanda.![]() Önemli birşeyi belirtmeyi unuttum. char *str = "DonanimHaber"; komple hatalı bir ifade. Normalde bunun derlenmemesi lazım ama ne hikmetse gcc bunu warning bile vermeden derliyor. Yaptığı şey ise şu. Stringi program koduna yazıp adresini str ye atıyor. str const olmadığı için str[0] = 'A'; ataması da yasak değil. Ama sonuçta malum sebepten çakılıyor. Kısacası bu bildirim şeklini kullanmayın. Zaten kimse tavsiye etmiyor. |
Derlenmemesi için dilin kuralları açısından bir engel yok ki, mantıksal bir hata. Adresi ataması da tamam. str[0] = 'A'; ataması derleme zamanında hata değil, evet. Kullanılmaması gerekir, const belirteci yazılmalıdır başına okunabilirlik olarak. Ama verdiğim cevaplar dilin kuralları dahilinde olan cevaplardı, aynı şeyleri söylüyoruz. Sadece son mesajımı okuduğunuzdan şüpheleniyorum ![]() |
Okudum. Size karşı yazılmış birşey değil zaten o. Sadece önceki mesajımda unuttuğum şeyi ek olarak yazdım. Uykum geldi ve biraz daha konuşursam saçmalamaya başlayacam.![]() İyi geceler. |
@4kalan Teşekkürler hocam. Bu arada üslubune uygun bir şekilde tartışmak iyidir ![]() @elektro_gadget yine sen iyisin hocam benim 10'dan sonra beyin off moduna geçiyor ![]() Bu arada C programlamayı CodeBlocks ile yapıyorum.String ifadeler içerisindeki türkçe karkaterleri göstermiyor ![]() |
Okuduğum kitap'da yer alan ve konu ile ilgili olabileceğini düşündüğüm bir sayfayı paylaşmak istedim.![]() < Resime gitmek için tıklayın > Head First C(http://www.it-ebooks.info/book/704/) kitabı, sayfa 73, memory ve pointers konusu. |
Ah ingilizce ah ![]() |
Arkadaslar merhaba, Diziler konusunu hiç anlamadım.Videolu anlatım gibi bir şey bar mı elinizde? Ya da bildiğiniz? |
Hangi dil? |
C# |
Arkadaşlar çok önemli bir ricam ödev var C den ödevi yaptım kod hazır yanlız program şuanki bulunduğum bilgisayarda yok o yüzden bilgisayarında visual studio bulunan birine kodu atsam kaydedip source file ını bana gönderebilir mi acaba? PM bekliyorum ltfen teşekkürler şimdiden. |
arkadaşlar bir küçük sorunum var... Sessiz harfleri yazarken proğram gereği ses dizisin içindeki tüm harfleri kontrol ediyor ve o kadar ekrana basıyor... Bunu while ile düzeltmeye çalıştım olmadı.. çözüm önerecek var mı? lütfen tek tek sesli harf sorgulatması önermeyin..!! #include<stdio.h> |
Daha verimli bir yol önerebilirim. Hem sorununa da çare olur. Ama sadece ipucu, gerisini sen yazarsın. Olmazsa söyle.![]() char ses[122] = {0}; ses['a'] = ses['e'] = ses['i'] = ses['o'] = ses['u'] = ses['A'] = ses['E'] = ses['I'] = ses['O'] = ses['U'] = 1; |
Arkadaşlar şöyle bir sorum var: Girilen bir sayıya kadar olan tüm sayıları teker teker yazan bir program yazmak istiyorum. Örneğin 5 yazdım, ekranda 1 2 3 4 5 görünmesini istiyorum ve bu programin while döngüsüyle yazılması gerekiyor. Nasıl yapabilirim? #include<stdio.h> |
Aynen buna katiliyorum, char *str = "Blabla" kullanmayin, kullandirmayin, hatta ornekte gostermeyin millet ordan burdan goruyor sonra kendi koduna ekliyor. strcpy() bosuna mi var? |
while dongusunun icindeki iki satiri tam tersi yapman gerekiyor. Yani printf i once i=i+1 i sonra yapman gerekiyor. bide while loopdaki kondisyonu kucuktur degil kucuk esit(<=) yapman gerekiyor. |
Yardım Edermisinizz ?? Bir dizi tamsayıyı toplayacak bir program yazınız; şöyleki: 1. Scanf ile okunan ilk sayı bundan sonra okunacak sayıların sayısını belirtiyor; 2. Program her scanf işletildiğinde yalnızca bir sayı okuyacaktır; 3. Örnek bir dizi şöyle olabilir: 4 35 23 33 715. Bu örnekteki 4 sayısı ardından gelen sayıların sayısını belirtmektedir; bu dört sayı teker teker okunac ak ve toplamı bulunacaktır; 4. Her biriniz yukarıdaki örneği değil, kendinizin belirlediği sayı dizisini kullanacaksınız. |
Merhaba, Yapamadığınız yer neresi? Orayı yazarsanız yardımcı olmaya çalışalım. |
Orada anlatılmak istenen şu; ilk hangi değer girilirse dizinin boyutuda o olacak. Örneğin ilk 5 girildiyse kendisinden sonra 5 tane daha sayı girilecek ve dizi 5 25 22 55 22 66 gibi bişey olacak. Daha sonrada dizideki elemanları getirip toplama işlemi yaptıracaksınız. |
Bir char dizisi tanımlarken;
char str[] = "DonanimHaber"; ifadesindeki stringi derleyici str nin gösterdiği yere yazar çünkü bilir ki str dizisi değişkendir ve içeriği değişebilmelidir.
Fakat;
const char str[] = ... ya da
const char *str = ... gibi bir bildirimde string code segmente yazılır çünkü değişmeyecek olan bir verinin bellekte yer kaplamasına gerek yoktur.
Bu arada c++ ta da stringler aynı mantıkla çalışır. const olmayanlar istenildiği gibi modifiye edilebilir.
Bu mesaja 2 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @4kalan