C stringlər

Salam mən C programlama dilində təzəyəm və oxudugum kitabda stringlərə aid 1 misal kod var və baça düçmədiyim hissə bu kodda enter e basdigdan sonra if də nə bas verir text char arrayinin 0 cı indexi niyə '\0' olur və readLine funksiyyası içində nə baş verir wordCount funksiyasın yazmadım başa düşmüşəm deyə indidən təşəkkürlər cavablarınızdan ötrü [code] #include <stdlib.h> #include<stdbool.h> void readLine (char buffer[]){ char character; int i = 0; do{ character = getchar (); buffer[i] = character; ++i; }while ( character != '\n' ); buffer[i - 1] = '\0'; } int main(void){ char text[2]; int totalWords = 0; bool endOfText = false; while(! endOfText){ readLine (text); if ( text[0] == '\0' ){ endOfText = true; }else{ totalWords += countWords (text); } } printf ("\nThere are %i words in the above text.\n", totalWords); return 0; } [/code]

Verilmiş cavablar və yazılan şərhlər (4 cavab var)

Mövla (2016-11-12 00:25:47)
Çox saöolun minnətdaram sizə cavabınız üçün

ahmed (2016-11-07 16:52:44)
C də ümumiyyətlə safety deyilən bir anlayış yoxdur. Kompilyator sizin yerinizə heçnəyi yoxlamır, ən azından unix platformasında belədir. O ki qaldı char arrayin 2 -dən çox yazını qəbul etməsinə. Bu işləyəcək. C də sətrin sonu '\0' simvolu ilə müəyyə olunur. Əgər 2 -ölçülü char arrayə 3,5 və ya 15 simvol yazmısızsa deyək ki göstəricilərlə axırada sətrin sonu '\0' simvolu , onda sətir normal işləyəcək. Amma extra simvollar yaddaşda başqa bir məlumatların üzərinə yazıla bilər. Bu isə çooox pis haldır. Ona görə double check hər şeyi, C - də proqram yazanda.

Mövla (2016-11-04 23:41:24)
Salam Çox sagolun cavab üçün 1 də burda char array 2 di anca bəzən 2dən çox yazandada error vermir bunun səbəbi c nin type safety dedikləri işdə zəif olmagıdı?

ahmed (2016-10-30 20:27:30)
Salam. readline funksiyası daxil olunan sətri verilən buferə yerləşdirir. Misal üçün istifadəçi Ahmed (5 simvol) yazıb enter basırsa Enter simvolu ('\n') da qəbul olunur və buferə yerləşdirilir. Bu eliyir 6 simvol. Ahmed + '\n'. Daha sonra readline funksiyası yeni sətir simvolun (enter düyməsi ilə əlavə olunan) buferdən silir: buffer[i - 1] = '\0'; Yeni sətir simvolun '\n' sətrin sonu '\0' simvolu ilə əvəzləməklə. Əgər istiadəçi heçnə daxil etməyib sadəcə enter düyməsini basarsa onda bufer sadəcə bir - yeni sətir simvolundan ibarət olar '\n', bufer[0] == '\n'. Indekslər 0-dan hesablanır. Onu da yeni sətir simvolu ilə əvəz etdikdə buferin ilk simvolu yəni buffer[0] olur '\0' . if operatorunda da bu şərt yoxlanılır.