将指定长度的字符串插入到另一个字符串的指定位置-C语言

29 篇文章 0 订阅
/*******************************************************************************
* @fn      Insert_String 
*
* @brief   将指定长度的字符串插入到另一个字符串的指定位置
*
* @param   oldstr 旧字符串; instr[] 插入的字符串;location 插入的位置; length 插入的数据长度
*
* @return  no
*******************************************************************************/
void Insert_String(char *oldstr, char instr[], int location, uint8_t length)
{
	int  j, k;
	char dat_tmp[100];
	
	for(j=0; j<location-1; j++)//将位置前的数据存到dat_tmp
               dat_tmp[j] = oldstr[j];
	
	//将instr复制到dat_tmp后面
	j--;
	k = 0;
	
	while(length--)
	{
		j++;
		dat_tmp[j] = instr[k];
		k++;
	}
	
	//将oldstr第location位后复制到dat_tmp尾部
	k = location - 1;
	while(oldstr[k] != '\0')
	{
		j++;
		dat_tmp[j] = oldstr[k];
		k++;
	}
	
	//给dat_tmp字符串添加结束符
	j++;
	dat_tmp[j] = '\0';
	//将dat_tmp字符串复制给oldstr
	for(k=0; k<=j; k++)
                oldstr[k] = dat_tmp[k];
}

举例:字符串中存放着wifi密码和账号,需要修改字符串中的密码和账号

char set_wifi[100] = "AT+CWJAP_DEF=\"wifi_name\",\"wifi_pswd\"\r\n";//要改动的字符串

void WiFi_CFG(uint8_t *buf, uint16_t len)//从串口中收到数据后调用此函数
{
     uint8_t date_len;
     static char set_wifi_head[100] = "AT+CWJAP_DEF=\"\",\"\"\r\n";
     char set_wifi_name[20], set_wifi_pswd[20];
     static uint8_t name_date_len, pswd_date_len;//wifi名称长度,密码长度

     date_len = len;
     memcpy(Wireless_Data_BLE.RX_data, buf, date_len);//Wireless_Data_BLE.RX_data存放从蓝牙串口收到的数据
    
     if(Wireless_Data_BLE.RX_data[0] == 'W')//配置wifi名称
     {
		memcpy(set_wifi_name, Wireless_Data_BLE.RX_data+2, date_len-2);//复制wifi名字到数组中
		name_date_len = date_len-2;//2是帧头长度
		Insert_String(set_wifi_head, set_wifi_name, 15, name_date_len);//插入wifi名字到数组中
		//Ble_REC_Flag.wifi_name_ok = 1;
	}
	else if(Wireless_Data_BLE.RX_data[0] == 'P')//配置wifi密码
	{
		memcpy(set_wifi_pswd, Wireless_Data_BLE.RX_data+2, date_len-2);//复制wifi密码到数组中
		pswd_date_len = date_len-2;//2是帧头长度
		Insert_String(set_wifi_head, set_wifi_pswd, 18+name_date_len, pswd_date_len);//插入wifi密码到数组中
		//Ble_REC_Flag.wifi_pswd_ok = 1;
		
		memset(set_wifi, 0, sizeof(set_wifi)); //清空wifi信息
		strcpy(set_wifi, set_wifi_head);//更新wifi信息
	}
			
	memcpy(Wireless_Data_BLE.TX_data, Wireless_Data_BLE.RX_data, date_len);//回馈用
	Wireless_Data_BLE.TX_length = date_len;
	
        memset(Wireless_Data_WiFi.RX_data, 0, date_len); //清空接收

  }     
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大饼酱人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值