C/C++

Проблема с передачей массива в функцию. Язык Си

 void polish_symb(char* input, int input_len) { 
 
	char arr_symb[LEN] = { 0 }; //Массив с математическими операндами 
	int arr_index[LEN] = { 0 }; //Массив с индексами операндов 
	char arr_digits[LEN] = { 0 }; //Массив с числами, без операндов 
	int i = 0; //Итератор 
	int j = 0; //Итератор 
	int flag = 0; //Для обработки знаков с пробелами (12 + 13) 
 
	for (; i < input_len; i++) { 
		if (input[i] == 32) { //Если обрабатывается пробел, то нужно сделать сдвиг 
			flag++; 
			continue; 
		} 
		else if (input[i] >= '0' && input[i] <= '9') { //Обработка цифр 
			arr_digits[i - flag] = input[i]; 
		} 
		else if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '^' || input[i] == '!' || input[i] == '_') { //Обработка математических операндов 
			arr_symb[j] = input[i]; 
			arr_index[j] = i - flag; 
			arr_digits[i - flag] = ' '; 
			j++; 
		} 
		else { //Если есть ошибки в вводе 
			return; 
		} 
	} 
 
	arr_symb[j] = 'E'; //Конец строки 
	arr_symb[j + 1] = '\0'; 
	arr_index[j] = input_len - flag; //Для корректной обработки пробелов 
	arr_digits[i] = ' '; //хз зачем 
	arr_digits[i + 1] = '\0'; 
 
	//symb_find(arr_symb, arr_index, arr_digits, j + 1); 
	for (int i = 0; i < j+1; i++) { 
		if (arr_symb[i] == '+') { 
			plus_symb(arr_digits, arr_index[i], arr_index[i + 1]); //Передаем в функцию сложения массив с элементами, индексы расположения знаков 
			del_start_symb(arr_symb, 1); //Удаляем знак из строки 
			del_start_symb(arr_index, 1); //Удаляем индекс знака из строки 
		} 
	} 
} 
 
//Процедура для обработки выражения 
void symb_find(char* arr_symb, int arr_index[], char* arr_digits, int len) { 
 
	//Нет поддержки умножения 
	 
	for (int i = 0; i < len; i++) { 
		if (arr_symb[i] == '+') { 
			plus_symb(arr_digits, arr_index[i], arr_index[i + 1]); //Передаем в функцию сложения массив с элементами, индексы расположения знаков 
			del_start_symb(arr_symb, 1); //Удаляем знак из строки 
			del_start_symb(arr_index, 1); //Удаляем индекс знака из строки 
		} 
	}
} 
Код выше. Если строку symb_find(arr_symb, arr_index, arr_digits, j + 1); раскоментировать, то функция symb_find неправильно принимает arr_index. Как это можно исправить? Однако, цикл, написанный в symb_find корректно работает в polish_symb
Исправил. Ошибка была в другом блоке кода Дополнен 3 месяца назад
Ответы
А почему ты используешь arr_symb[j] = 'E'; //Конец строки arr_symb[j + 1] = '\\\\0'; ??? Сделай лушче arr_symb[j] = '\\0'; Для arr_digits, вместо вот этого arr_digits[i + 1] = '\\\\0'; , можешь взять это arr_digits[i - flag] = '\\0'; // Ничего ж сложного
Исправил, там в другом была проблема
Monstr1k, за пределы массива arr_index не выходит? Когда обращаешься к arr_index[i + 1]? len корректно передаётся в эту функцию?
Monstr1k, а, ну все тогда. Просто я думал в polishsymb проблема будет)
Monstr1k, В этом коде, по хорошему, еще много надо исправлять. Потенциальная уязвимость переполнения буфера если input_len > LEN чего стоит. А вообще, перед публикацией кода, полезно написать что он, по вашему, должен делать. Ибо без ТЗ понять суть порою бывает очень сложно.
D P, нет, переполнения не будет. По условию задачи, входная строка ограничена по размеру