Tekrar selam wizofwor
Pass by pointer ve
dereference konularında bir tekrar okuma yapman gerekiyor diye düşünüyorum. Çünkü:
itoa((uchar*)id, buffer, 10);
...bu yazdığın
dereference değil, bir
type cast.
Ha bak bu olur:
Son olarak id'nin önüne yıdız koydum. Bu şekilde uyarı vermiyor ama dosyayı da bulamıyor.
itoa((uchar)*id, buffer, 10);
...ama (uchar) yazmana gerek yok. Çünkü zaten bir uchar pointer'ı
dereference ettiğinde uchar bir değer elde edersin. Yani yazman gereken ilk yanıtımda yazdığım gibi sadece:
*idEğer dosyayı bulamıyorsa, pass ettiğin *id değerinde bir yanlışlık olabilir (gerçi buna neden olacak başka yanlışlar da var).
Bu arada böyle mikro optimizasyon yapacaksak,
pass by value maliyetinden daha büyük itoa() maliyeti var orada.
Sana tek basamaklı bir değeri 1 ascii değerine çevirecek bir işlem lazım o kadar. Bunu id'nin değerine 48 ekleyerek halledebilirsin (C64'te
string'ler
ascii'dir herhalde).
Yanlış anlamadıysam sen şöyle dosya adları istiyorsun:
id = 0 ise "tdat0"
id = 1 ise "tdat1"
...
id = 9 ise "tdat9"
ve "tdat10" kesinlikle yok, 9'a kadar (1 uchar'lık buffer tahsis etmiş olmandan çıkarıyorum bunu).
Eğer bu çıkarımlarım doğruysa... sen yine id'yi pointer'ı ile
pass et...
...fakat file_name'i şöyle oluştur:
uchar file_name[6] = "tdat0"; // 6 çünkü NULL terminator için byte daha lazım.
file_name[4] = *id + 48; // 48 çünkü ascii 48 '0' demek.
Al sana sade çok optimize (itoa, strcpy ve strcat'den kurtuldun) hem de doğru çalışacak bir kod.
