

/* 求子串1 */
char* substr1( char* src, int offset, int count)
{
char* des="";
char* temp=des;
int srclen=0;
int i;
srclen=strlen(src);
src += offset;
if (offset>srclen)
return "";
for(i = 0; (i < count)&&(i+offset<srclen); i++)
{
*des++ = *src++;
}
*des = '\0';
return temp;
}
上面函数导致严重问题,应该是指针越界导致。
/* 求子串2 .*/
char* substr( char* src, int offset, int count)
{
char des[count+1];
char* temp=des;
int srclen=0;
int i;
srclen=strlen(src);
src += offset;
if (offset>srclen)
return "";
for(i = 0; (i < count)&&(i+offset<srclen); i++)
{
*temp++ = *src++;
}
*temp = '\0';
return des;
}
函数2改进后如下,先定义内部数组分配足够空间,再拷贝子串数据进入此数组,最后返回数组地址。使用目前正常。
/* 求匹配串索引 .*/
int strindex(char* src,char* des)
{
char* ptr=strstr(src,des);
if (strlen(ptr)==0)
return -1;
else
return ptr-src;
}
此函数不涉及指针及地址修改,应无问题。
目前软件项目有如下特点:
工期比项目功能更重要,项目功能比项目质量更重要。选择一种开发思路,要避免一些危险的方式。优先选择也许是最笨但最可靠的方法,提高可读性,减少程序陷阱,避免在项目规模扩张后导致无法解决的问题。如C的内存操作,尽量显式分配空间,尽量拷贝而不是指针赋值,虽然牺牲些效率和空间,但带来的好处会远大于损失。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/306.html
