C'de "String Length" bulma

Başlatan Cemre., 25 Ekim 2018, 08:25:21

Cemre.

Merhabalar,

Aşağıdaki gibi bir fonksiyon prototipim mevcut.
Serial_Print(Serial_Handler_TypeDef *hSerial, char *Str, unsigned int TimeOut_Period)

Kullanımı ise şu şekilde,
Serial_Print(&hSerialPC, "Debug Message #1\r\n", TIMEOUT_SERIAL);

Fonksiyonun içerisinde string length bulma işlemini şu şekilde yapıyorum.
tStr_Length = 0;
tStr_Index = 0;
while(Str[tStr_Index++] != '\0')
{
  tStr_Length++;
}

Herhangi bir durumda string'in sonunun '\0' ile bitmeme ihtimalini düşününce afakanlar basıyor :)
String'i gönderirken elle sonuna ETX koymak mümkün tabiki, ister null karakter olur, ister özel bir karakter olur, ancak bunu yapmak kullanım tarafını zorlaştıracağından pek istemiyorum. Siz ne önerirsiniz?


Bu arada FreeBSD 6.2'de strlen implementasyonu aşağıdaki gibiymiş...
size_t strlen(const char * str)
{
    const char *s;
    for (s = str; *s; ++s) {}
    return(s - str);
}

Teşekkürler.

Zoroaster

String sonunda 0x00 vardır. Yoksa ona string denmez zaten.

2 tür yollama yapabilirsin. 

1. String gönderme (Sonu zaten 0x00)
2. Bir diziden n tane eleman gönderme
Seytan deliginden kacti.

mufitsozen

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

quarko

Serial_Print fonksiyonunun içinde stringi aldığın değişkenin uzunluğu, gönderdiğin stringin uzunluğundan küçükse veya stringi aldığın değişken local ise başlangıçta içinde çöp değer olduğu durumda bahsettiğin sıkıntı yaşanabilir. O yüzden string buffer ını yeteri kadar uzun tut ve string uzunluğunu buffer_length değerini aşıp aşmadığını kontrol et. Ayrıca bufferını gerekli yerlerde temizle. Bunun için memset fonksiyonunu kullanabilirsin.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

Mucit23

printf fonksiyonu olmuyormu? Ben Uart işlemlerinde printf kullanıyorum.

Cemre.

Alıntı yapılan: Zoroaster - 25 Ekim 2018, 09:23:13String sonunda 0x00 vardır. Yoksa ona string denmez zaten.

Bu compiler'ın compile anında string'i bir memory alanına yazarken özellikle yaptığı bir işlemden mi kaynaklanır?
Bu konuyla ilgili daha fazla açıklamayı nereden bulabilirim?

Gediz1337

Alıntı yapılan: Cemre. - 25 Ekim 2018, 12:57:57Bu compiler'ın compile anında string'i bir memory alanına yazarken özellikle yaptığı bir işlemden mi kaynaklanır?
Bu konuyla ilgili daha fazla açıklamayı nereden bulabilirim?

https://en.m.wikipedia.org/wiki/Null-terminated_string