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);
}