BuckvicK
@BuckvicK
Опытный ламер

Как посчитать строки в динамическом массиве?

#define STR 3

int len_text(char** text){
	int i = 0;
	while (*(text+i)){
		i++;
	}
	return i;
}

char* get_string(){
	int i = 0;
	char *str;
	str = (char*)malloc(sizeof(char));
	while ((*(str + i) = getchar()) != '\n'){
		i++;
		str = (char*)realloc(str, (i + 1) * sizeof(char));
	}
	*(str + i) = '\0';
	return str;
}

int main(){
int j = 0, i = 0;
text = (char**)malloc(sizeof(char*));
	do{
		j = 0;
		text[i] = (char*)malloc(sizeof(char));
		text[i][j] = (char)malloc(sizeof(char));
		*(text + i) = get_string();
		i++;
		text = (char**)realloc(text, (i + 1) * sizeof(char*));
	} while (i < STR);
printf("%d", len_text(text));
rerurn 0;
}

Текст должен вводится до определенного условия, i STR это частный случай.
Функция len_text работает не совсем правильно, она возвращает неверное количество строк, в чем может быть проблема?
Как сделать это более грамотно, с точки зрения этики программирования?
  • Вопрос задан
  • 228 просмотров
Пригласить эксперта
Ответы на вопрос 2
@MiiNiPaa
printf("%d", len_text);
Радостно выведет значение указателя на функцию len_text. Функции вызывать надо.

Также огромное количество выделений памяти. Код можно назвать Изнасилование кучи
Ответ написан
@werktone
Так вроде бы код работает.

p.s. Автор, зачем вы используете конструкции вида *(text + i)? Это абсолютно тоже самое, что и text[i].
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы