PDA

Tam Sürümünü Görmek İçin : yapılarla ilgili bir sorun [c]


BFS
13/01/2008, 14:36
Arkadaşlar derleyici aşağdaki kodları derlerken hata veriyor.

#include <stdio.h>
#include <stdlib.h>

struct ogrenci{
char isim[20];
char s_isim[20];
int yas;
int no;
};

int main()
{
struct ogrenci ogr1;
ogr1.isim="deneme"; //hata veren satır
ogr1.s_isim="test"; // hata veren satır
ogr1.yas=22;
ogr1.no=4009;
printf("%s\n%s\n%d\%d\n",ogr1.isim,ogr1.s_isim,ogr1.yas,ogr1.no);
system("PAUSE");
return 0;
}

hata mesajı=uncompatible types in assignment

ben nereyei yanlış yapıyorum?


quasimodo
13/01/2008, 16:11
Dizi ismi nesne değildir.

BFS
13/01/2008, 17:25
kodları aşağdaki gibi değiştirince hata çıkmıyor.
#include <stdio.h>
#include <stdlib.h>

struct ogrenci{
char isim[20];
char s_isim[20];
int yas;
int no;
};

int main()
{

struct ogrenci ogr1={"deneme","test",22,4009};

printf("%s\n%s\n%d\n%d\n",ogr1.isim,ogr1.s_isim,ogr1.yas,ogr1.no);
system("PAUSE");
return 0;
}

O zman ben sorumu şöyle değiştreyim yapı elemanlarına aşağdaki gibi ilk değer veremiyor muyuz ya da yapının elemanları olan dizilere?

ogr1.isim="deneme";
ogr1.s_isim="test";
ogr1.yas=22;
ogr1.no=4009;

quasimodo
13/01/2008, 18:06
char array[10];
array = "merhaba"; // hata ?

Neden: cunku dizi ismi dizinin baslsngic adresini gosteren
bir sabittir. Nesne değildir!

char * array;
array = "merhaba";
yapabilirsin...

BFS
13/01/2008, 18:20
Ok. Teşekkur ederim...

acehreli
13/01/2008, 19:51
char * isim;

gibi yapinca sonra malloc ile ayirdigin dizgileri kullanman gerekecek, degil mi... Cunku soyle yaparsan

ogr1.isim = "ali";

ancak program metnine yazdigin dizgilerle kullanabilirsin. Kullanicinin girdigi bir ismi kullanabilmek icin, o girilen dizginin bir kopyasini alman gerekecek; ornegin strcpy ile...

Ali

choldax
14/01/2008, 18:07
eğer ille de static array (name[50]) gibi kullanmak istiyorsan, o zaman strcpy fonksiyonunu kullan derim ben (:

BFS
14/01/2008, 23:57
SAğ olun arkadaşlar...