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
memcpy
strcpy
for
kullanabilirsin.
Direkt eşitlik çalışmaz.
strcpy(RaporDosyaListesi[2],TekDosyaAdi);
memcpy(RaporDosyaListesi[2],TekDosyaAdi,13);
şeklinde denedim gene olmuyor.
strcpy(&RaporDosyaListesi[2],TekDosyaAdi);
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"
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.
6 dosya adını tutan dizinin atıyorum 3. elemanını değiştirmek istiyorum. bu örnekte
"3c3456789.123"
degerini
"7g3456789.123"
yapmak istiyorum.
memcpy(RaporDosyaListesi[2],TekDosyaAdi,13);
Komutunu çalıştırdığında ne oluyor.
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);
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 (http://www.youtube.com/watch?v=-4YFD3vOY60&feature=youtu.be#)