Open AndrewGavril opened 11 months ago
@AndrewGavril покажите, пожалуйста, пример - как правильно и как не правильно (и желательно возможные исключения из правила:)
Плохой пример:
char* input_text(){
int count_char = 1;
int summ_memory = 200;
char* text = malloc(summ_memory*sizeof(char));
if(text == NULL){
puts("Eror! Failed to allocate memory.");
exit(1);
}
char ch = getchar();
char ch_old = ' ';
int flag = 1;
while(1){
if(ch == '\n' && ch_old == '\n'){
if (text[count_char - 3] != '.'){
text[count_char - 2] = '.';
text[count_char - 1] = '\0';
break;
}
text[count_char - 2] = '\0';
break;
}
if(count_char == summ_memory){
summ_memory += 20;
text = realloc(text, summ_memory*sizeof(char));
}
if(ch_old == '.'){
flag = 1;
}
if(!(ch_old == '.' && (ch == ' ' || ch == '\t')) && !(ch_old == '.' && ch == '\n') && !((ch_old == ' ' || ch_old == '\t') && (ch == ' ' || ch == '\t') && flag == 1)){
text[count_char - 1] = ch;
flag = 0;
count_char++;
}
ch_old = ch;
ch = getchar();
}
return text;
}
В строке summ_memory += 20;
число 20 не понятно за что отвечает и нужно только догадываться. Если человек не знаком с кодом или спецификой программы ,то такие константы могут вводить в заблуждение. (Как пример, человек может изменить это значение на неправильно и нарушить логику работу программы, особенно если число означает размер той или иной структуры).
Лучше заменить такой код на:
#define BUF_STEP_SIZE 20
...
summ_memory += BUF_STEP_SIZE;
Вместо использования макросов используются константы прямо в коде, что становится нечитабельным
Нужно предусмотреть ситуации с идексированием по 0, 1 элементу или n-1 элементу, когда эти константы оправданы