Merhabalar
Stm32 ile projemde eeproma string olarak yazı eklemem gerekli ve hali hazırda kullanmış olduğum yapım var.
char *_TXT_R_1[]={"ali"};
char *_TXT_R_2[]={"veli"};
char *_TXT_R_3[]={"selami"};
char *_TXT_R_4[]={"1234"};
char **_TXT_R_ARRAY[4] =
{
_TXT_R_1,
_TXT_R_2,
_TXT_R_3,
_TXT_R_4
};
printf("%s" ,_TXT_R_ARRAY[0][0] ); // ali
printf("%s" ,_TXT_R_ARRAY[1][0] ); // veli
printf("%s" ,_TXT_R_ARRAY[2][0] ); // selami
printf("%s" ,_TXT_R_ARRAY[3][0] ); // 1234
yukarıdaki kodda bir katar yapım var. Yapmak istediğim _TXT_R_ARRAY değişkeni üzerinden epromdan okuduğum yeni isimleri değiştirmek
(*_TXT_R_ARRAY)[0]= "yeni";
şu şeklide _TXT_R_1 içeriği değişiyor ama
(*_TXT_R_ARRAY)[1]= "yeni";
şeklinde _TXT_R_2 içeriğini değiştiremiyorum bunun için calloc kullandım ama başaramadım. Nasıl bir yol izlemeliyim.
Teşekkür ederim.
strcpy, strcat fonksiyonlarını deneyiniz.
char *_TXT_R_1[]={"ali"} değişkeni STM32' nin flash yani ROM bölgesinde olduğu için içeriğini değiştiremezsiniz.
@mehmet hocamın dediği gibi strcpy fonksiyonu kullanın.
char _TXT_R_1[16]; gibi RAM' de bulunan bir dizi değişkeni oluşturup strcpy fonksiyonu ile "ali" string değerini bu dizi değişkenine kopyalayın.
Daha sonra istediğiniz gibi üzerinde işlem yapabilirsiniz.
String dizilerinin son karakterini '\0' karakteri yaptığınızdan emin olun.
ali\0 -> ahmet\0
karakter uzunluklarınız farklı, ya uzunluklar eşit olsun ya da söyledikleri gibi son karakteri kendiniz 0x00 olarak değiştirin.
Yazıların sadece yerleri değiştirilmek isteniyorsa string kütüphanesi kullanılmak zorunda değil ilk yaptığınız gibi, stringleri rom a gömüp sadece işaretçilerinin(pointer) yerleri değiştirilebilir. ilkokul fiş defterleri gibi yazılar kağıtlarda sabit ve kağıtların yerlerini değiştirip anlamlandırmak gibi.