Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: Cemre. - 25 Ekim 2018, 08:25:21

Başlık: C'de "String Length" bulma
Gönderen: Cemre. - 25 Ekim 2018, 08:25:21
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.
Başlık: Ynt: C'de "String Length" bulma
Gönderen: Zoroaster - 25 Ekim 2018, 09:23:13
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
Başlık: Ynt: C'de "String Length" bulma
Gönderen: mufitsozen - 25 Ekim 2018, 09:24:37
strnlen
Başlık: Ynt: C'de "String Length" bulma
Gönderen: quarko - 25 Ekim 2018, 09:31:13
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.
Başlık: Ynt: C'de "String Length" bulma
Gönderen: Mucit23 - 25 Ekim 2018, 10:38:53
printf fonksiyonu olmuyormu? Ben Uart işlemlerinde printf kullanıyorum.
Başlık: Ynt: C'de "String Length" bulma
Gönderen: Cemre. - 25 Ekim 2018, 12:57:57
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?
Başlık: Ynt: C'de "String Length" bulma
Gönderen: Gediz1337 - 25 Ekim 2018, 14:53:53
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
Başlık: Ynt: C'de "String Length" bulma
Gönderen: Cemre. - 25 Ekim 2018, 17:19:20
Alıntı yapılan: Gediz1337 - 25 Ekim 2018, 14:53:53https://en.m.wikipedia.org/wiki/Null-terminated_string
Teşekkürler.