Arkadaşlar fonksiyondan string değer döndürmek konusunda bir sorunum kalmadı. Cevaplarınız için ayrı ayrı teşekkür ederim..
Her sorum için başka bir konu açarak forumu doldurmamak için burada devam etmek istiyorum.
proje dosyamdaki bazı bölümleri ayrı bir c dosyasında tutarak ana programın içine include ile ekliyorum. ancak bir kütüphane 2 ayrı c dosyasında da olunca "Multiply defined" hatası veriyor. #ifdef kullanmayı düşündüm ancak onunlada neyi kontrol edeceğimi bilemedim.
örneğin delay.c kütüphanesini hem ana kodda hemde alt kodlarda tanımladığımda bu sorun ortaya çıkıyor.
sizce nasıl bir yol izlemeliyim ?
Merhaba;
Bu iş C de en güzel pointer ile yapılır (C ++ kullanıyor isen string class tabiki daha iyi)
örneğin
void fonkadi(char *cDonecek)
{
*(cDonecek) = 'a';
*(cDonecek+1) = 'b';
*(cDonecek+2) = 'c';
*(cDonecek+3) = '\0';
}
-----
char[10] cStr;
fonkadi(&cStr);//cStr="abc";
pointer konusunu irdelersen kendine ve amacına daha uygun bir yol bulabilirsin
Not: Kullandığın derleyici farklılık gösterebilir derleyicinin dökümanlarını inceleyin
kolay gelsin
char* fonksiyon(void) şeklinde tanımlayıp pointer olarak geri dönebilirsin. Bu pointeri de dizi olarak kullanabilirsin.
Arkadaşlar cevaplarınız için teşekkür ederim.
Derleyicim Hi-tech C 9.50
Aşağıdaki kod bu haliyle sorunsuz çalışıyor. Ancak fonksiyonu çağırırken değişkenin başındaki "&" karakterini koyarsam "Redurant "&" applied to array" hatası veriyor. & karakterini koymayarak, bu haliylede sorun çıkartmıyor ama ilerde sorun yaşayailirmiyim sizce ?
#include <pic.h>
#include <delay.c>
#include "LcdSurucu.h"
unsigned char veri[10];
void fonkadi(char *cDonecek)
{
*(cDonecek) = 'a';
*(cDonecek+1) = 'b';
*(cDonecek+2) = 'c';
*(cDonecek+3) = '\0';
}
void main() {
DelayMs(200);
lcd_init();
lcd_goto(0);
lcd_puts("Deneme");
fonkadi(veri);
lcd_goto(0x40);
lcd_puts(veri);
while(1);
}
Derleyici farklılıklarından kastım buydu sorun yaşayacağını sanmıyorum.
Başarılar
Alıntı yapılan: pardaMerhaba;
Bu iş C de en güzel pointer ile yapılır (C ++ kullanıyor isen string class tabiki daha iyi)
örneğin
void fonkadi(char *cDonecek)
{
*(cDonecek) = 'a';
*(cDonecek+1) = 'b';
*(cDonecek+2) = 'c';
*(cDonecek+3) = '\0';
}
-----
char[10] cStr;
fonkadi(&cStr);//cStr="abc";
pointer konusunu irdelersen kendine ve amacına daha uygun bir yol bulabilirsin
Not: Kullandığın derleyici farklılık gösterebilir derleyicinin dökümanlarını inceleyin
kolay gelsin
Merhaba,
Arkadaş burada ufak, ama önemli bir hata yapmış.
Yazı tutan diziler.
örneğin;
unsigned char yazi1[]="deneme yazisi 1";
Şeklinde bir yazının başlangıc adresini(pointer) iki türlü tanımlayabilirsiniz. Birinci yol dizilerin ismini adres yerine geciyor, doğrudan dizinin isnin kullanabilirsin.
İkinci yol dizinin sıfırıncı elemanın adresini gecebilirsiniz. Her iki kullanımda olabilir. Ancak arkadaşımız burada dizi isminin başına adres operatörü kullanmış. Bu da şu adresin adrsi anlamına geldiği için hata veya uyarı verir.
Aşağıdaki gibi kullanabilirsiniz.
unsigned char yazi1[]="deneme yazisi 1";
unsigned char *pointer;
poniter = yazi1;
poniter = &yazi1[0];
lcd_puts("Deneme");
lcd_puts(yazi1);
lcd_puts(&yazi1[0]);
lcd_puts(pointer);
pointer = " test2";
lcd_puts(pointer);
şekline kullanılabilir.
Selamlar
Cevaplarınız için teşekkür ederim..