Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Struct içindeki char array

Başlatan kimlenbu, 25 Nisan 2014, 13:40:42

kimlenbu

Konuyu ARM altına açtım ama...


diyelim ki 6 adet dosya adını tutan bir dizi tanımladım :

uint8_t *RaporDosyaListesi[6] =
{
{"1a3456789.123"},
{"2b3456789.123"},
{"3c3456789.123"},
{"4d3456789.123"},
{"5e3456789.123"},
{"6f3456789.123"},
};


daha sonra sadece 1 dosya adı tutan bir dizi tanımladım diyelim (bu tanımlama aslında struct içinde, değer sonradan atanıyor) :

uint8_t TekDosyaAdi[13]="7g3456789.123";


şimdi ben 6 dosya adı tutan dosyanın atıyorum 3. elemanına bu tek dosya adını nasıl atarım ??

bu olmuyor,alakasız karakterler çıkıyor :

RaporDosyaListesi[2]=TekDosyaAdi



SpeedyX

memcpy
strcpy
for
kullanabilirsin.

Direkt eşitlik çalışmaz.

kimlenbu

#2
strcpy(RaporDosyaListesi[2],TekDosyaAdi);


memcpy(RaporDosyaListesi[2],TekDosyaAdi,13);


şeklinde denedim gene olmuyor.

yldzelektronik

strcpy(&RaporDosyaListesi[2],TekDosyaAdi);
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

kimlenbu

Alıntı yapılan: yldzelektronik - 25 Nisan 2014, 14:08:41
strcpy(&RaporDosyaListesi[2],TekDosyaAdi);


aşağıdaki hatayı veriyor :

main.c(4021): error:  #167: argument of type "char **" is incompatible with parameter of type "char *restrict"

yldzelektronik

Ben olayı dizinin tek elemanına değer atamak istediğiniz şeklinde algılamışım.Hatta onun için şimdi strncpy fonksiyonunu söyleyecektim.Ancak şimdi fark ettim.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

kimlenbu

6 dosya adını tutan dizinin atıyorum 3. elemanını değiştirmek istiyorum. bu örnekte

"3c3456789.123"
degerini
"7g3456789.123"
yapmak istiyorum.

yamak

memcpy(RaporDosyaListesi[2],TekDosyaAdi,13);

Komutunu çalıştırdığında ne oluyor.

CLR

değişken olarak string kullanmışsın, yani string array yapmışsın ama tanımlamanda uint8 ptr yapmışsın bu böyle olmaz. Aşağıdaki gibi iki boyutlu array kullanırsan sorunsuz olması lazım

uint8_t *RaporDosyaListesi[6][13] =
{
{"1a3456789.123"},
{"2b3456789.123"},
{"3c3456789.123"},
{"4d3456789.123"},
{"5e3456789.123"},
{"6f3456789.123"},
};


memcpy(RaporDosyaListesi[2],TekDosyaAdi,13);
Knowledge and Experience are Power

kimlenbu

#9
Dediklerinizin hepsini denedim olmadı, en son tasarımı değiştirdim artık, çalıştı sonunda...

typedef struct RaporDosyaTablosu
{
	uint8_t rapdosyaadi[13];
	uint8_t raptarih[9];
	uint8_t rapbaslangicsaati[9];
	uint8_t rapbitissaati[9];
}RaporDosyaTablosu;

RaporDosyaTablosu RaporDosyaTablom[6];


strcpy(RaporDosyaTablom[2].rapdosyaadi,TekDosyaAdi);


mesaj birleştirme:: 25 Nisan 2014, 15:31:57

amacım tıklanan dosya adının yeşil gösterilmesini sağlamaktı, haliyle 6 lı bloklar halinde okuduğum dosya adlarına ulaşmam lazımdı, çok teşekkürler herkese.

! Private video