Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Динамическая замена символа в массиве


Автор: supercelt 26.11.2017, 16:24
Всем привет. Прогаю на СИ под МК stm32. Вопрос такой:

Есть массив, с указателем на него

Код

char gsm_cusd_command[31] = "AT+CUSD=1,#,15\r";
char *gsm_point_cusd_command = gsm_cusd_command;


В процессе работы появляется ещё один массив, он тоже заранее известной длины, но он скажем так наполняется тем, что чел введёт с клавиатуры

Код

char gsm_ussd_balance_command_input[16] = ""; //Массив для хранения введённой USSD команды баланса из меню телефона
char *gsm_point_ussd_balance_command = gsm_ussd_balance_command;


После ввода, данные в этом массиве могут быть такими: *100#

А вопрос вот, нужно в исходном массиве заменить символ # на то что во втором массиве. А динамической заменой  я назвал, потому что надо в исходном массиве всё что после #  - подвинуть соответственно вправо. И должно получиться 

Код

char gsm_cusd_command[31] = "AT+CUSD=1,*100#,15\r";


Впринципе можно заморочиться и написать свою ф-ию, но нет ли стандартных решений, более лёгких что ли?

Автор: akizelokro 27.11.2017, 18:11
Да вообщем-то что так маета, что так маета (хоть и не очень большая) strcat/strncat либо разбор ручками.

Автор: Курсант 22.12.2017, 11:41
Первый массив разбейте на два. Получится 
Arr1 = "AT+CUSD=1,";
Arr2 = ",15\r"

Потом у Вас появляется третий массив.
Arr3 = "*100#".

Дописываете Arr3 к Arr1, потом к тому, что получилось дописываете Arr2.
PROFIT.

Автор: Dov 23.12.2017, 21:43
Ну, если предположить, что данные выглядят как-то так:
Код

char  gsm_cusd_command[31]               = "AT+CUSD=1,#,15\r";
char *gsm_point_cusd_command             = strchr(gsm_cusd_command, '#');
char  gsm_ussd_balance_command_input[16] = "*100#";

то можно записать как-то так:
Код

strcpy(gsm_point_cusd_command, strcat(gsm_ussd_balance_command_input, gsm_point_cusd_command + 1));

Указатель перед этим нужно проверить на валидность.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)