C++开发学习笔记:Proc中替换指定字符串

int find_result_len=0;
int str1_len=0;
char substr_result1[2002]="";
char substr_result2[2002]="";
char find_result_temp[2002]="";

char substr_result[]="";
char tempStr[]="";

strcpy(subkey_sql,"");
for(int a=1;;)
{
	char str1[]="@WORK_DATE";
	//重置
	strcpy(substr_result1,"");
	strcpy(substr_result2,"");

	if(strcmp(subkey_sql,"")==0)
		strcpy(subkey_sql,DynamicSQL_str);
	
	//strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。
	//如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
	//strstr("Helloworld!","world");输出world!
	char *find_result=strstr(subkey_sql,str1);
	EDLog(1,1,"find_result=[%s]",find_result);
	strcpy(find_result_temp,find_result);

	if(!find_result)
		break;

	//变量find_result_len需要定义为静态局部变量;如果直接使用int find_result_len=strlen(find_result);
	//在使用一次之后虽然没有赋值语句,但是变量的值依然被改变了(不知道为什么会被改变)
	//静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,
	//它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见,每次被调用都使用上一次的值。
	find_result_len=strlen(find_result);

	//将第二个参数字符串中截取(默认从0开始截取)长度为str1的长度的字符复制到第一个参数中	
	strncpy(substr_result,find_result+strlen(str1),find_result_len-strlen(str1));

	//应为strncpy()函数截取时第二个参数的长度大于或等于要截取的长度,导致结果字符串不是以\0结尾
	//会多出一些数字,因此需要手动将结尾置为\0(结束符)
	if(find_result_len-strlen(str1)>0)
		substr_result[find_result_len-strlen(str1)]='\0';								

	//strncpy返回一个char*类型(指针类型),转为char[]时需要指定char[]的长度,否则出现乱码
	sprintf(substr_result1," :C_WORK_DATE %s ",substr_result);

	//获取strstr()函数对比结果之后母字符串子串之前的字符串,该句执行之后substr_result的也会跟着改变
	//因此该句必须在将substr_result的结果保存之后再执行
	strncpy(tempStr,subkey_sql,strlen(subkey_sql)-find_result_len);

	if(strlen(subkey_sql)-(strlen(subkey_sql)-find_result_len)>0)
		substr_result[strlen(subkey_sql)-find_result_len+1]='\0';

	sprintf(substr_result2," %s",tempStr);
	
	sprintf(subkey_sql,"%s%s",substr_result2,substr_result1);

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值