Çox saöolun minnətdaram sizə cavabınız üçün
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.
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ı?
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.