/* 求子串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