俺是小王子 程序猿  2014年01月07日
【大家来找茬】不知道到这发个这样的帖子合不合适呀。。。各位C/C++大牛们快来呀~~~~~~~~~
玩个大家来找茬的游戏

呵呵,不过这个游戏还真没QQ游戏里的那个那么好玩~~~~
这样的,我贴出几段代码,上面有各个不同的功能,其中至少有一段代码存在漏洞,会导致程序陷入死循环或者什么的。

先说要求:只能使用基本操作去实现string.h库中的一些函数功能。前提是不能包含string.h。

代码片段一: 获取字符串长度
unsigned int strlenth(char *s)  
{
unsigned int lenth = 0;
if(!s){
return 0;
}
while(*(s++)){
lenth++;
}

return lenth;
}



代码片段二:字符串拷贝
void strcopy(char **target, char *source) 
{
unsigned length = strlenth(source);
*target = (char*)malloc(length);
**target = 0;
if(!source || !*target){
return;
}
unsigned int i = 0;

while(source[i]){
(*target)[i] = source[i++];
}
(*target)[i] = '\0';


}



代码片段三: 字符串比较,s>t,则返回1;s=t,则返回0;s<t,则返回-1
int strcompare(char *s, char *t)  
{

if(!s && !t){
return 0;
}
if(s && !t){
return 1;
}
if(!s && t){
return -1;
}
while(*s || *t){
if(*s > *t){
return 1;
}else if(*s < *t){
return -1;
}

s++;
t++;

}

return 0;
}


代码片段四:字符串连接,将字符串t接到s后面,x为连接后的新串
void strcombine(char **x, char *s, char *t)  
{

if(!s){
*s = '\0';
}
if(!t){
*t = '\0';
}
unsigned int length = strlenth(s) + strlenth(t);
*x = (char*)malloc(length);
**x = '\0';
unsigned int i = 0;
while(*s){
(*x)[i++] = *(s++);
}
while(*t){
(*x)[i++] = *(t++);
}
(*x)[i] = '\0';

}


代码片段五: 字符串截取,从第index个字符开始,截取lenth长度的字符串,并输出到字符串t
void strcatch(char *s, unsigned int index, unsigned int lenth, char **t) 
{

unsigned int length = strlenth(s);
if(!s || lenth > length - index || lenth < 1 || index > length){
return;
}
*t = (char*)malloc(lenth);
**t = 0;

unsigned int i = index, j= 0;
for(; i <index + lenth; i++){
(*t)[j++] = s[i];
}
(*t)[j] = '\0';


}


代码片段六: 字符串子串查找,如果子串sub在s中存在,则返回1,否则返回0
bool strsubstr(char *s, char *sub) 
{
bool result = 0;


if(!s || !sub){
return 0;
}
unsigned int i = 0, j = 0;
unsigned int length1 = strlenth(s);
unsigned int length2 = strlenth(sub);
if(length1 == 0 && length2 == 0){
return 1;
}
for(; i < length1; i++){
if(s[i] == sub[j++]){
if(j == length2){
result = 1;
break;
}
continue;
}else{
j = 0;
}
}

return result;
}


散粉。。。。
...全文
82 点赞 收藏 16
写回复
16 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告