ruby-0.49 missing/strstr.c 源码分析


因为全部编译不了,我又搞不定如何编译正确。不知是gcc版本太高,还是操作系统太新,毕竟是1994年写的代码。我呢,也不想编译新版本的ruby,那样代码太多,我看不懂,也不划看,于是先随便翻翻。
把simple中打开了两个文件,不能编译,就执行不了。
于是再翻开missing,和gnu的有些文件象。比如
strstr.c
char *
strstr(string, substring)
    register char *string; /* String to search. */
    char *substring;  /* Substring to try to find in string. */
{
    register char *a, *b;
    /* First scan quickly through the two strings looking for a
     * single-character match.  When it's found, then compare the
     * rest of the substring.
     */
    b = substring;
    if (*b == 0) {
 return string;
    }
    for ( ; *string != 0; string += 1) {
 if (*string != *b) {
     continue;
 }
 a = string;
 while (1) {
     if (*b == 0) {
  return string;
     }
     if (*a++ != *b++) {
  break;
     }
 }
 b = substring;
    }
    return (char *) 0;
}
我读代码,也难读,先加个main
void main()
{
 char *m1="helloworld";
 char *m2="llo";
 char *ok;
 printf("%s\n",strstr2(m1,m2));
}
编译一把,看到结果后,再回头来理解代码,就理解了。
while (1) {
     if (*b == 0) {
  return string;
     }
     if (*a++ != *b++) {
  break;
     }
 }
就用来比较,当相等时,继续比较,如果全部相等时,就返回母串。
其中a,b的值因为比较时移动了,若不相等时,又要回到下次比较的位置开始。
说不清,但好象就是理解了。

猜你喜欢

转载自blog.csdn.net/woshiyilitongdouzi/article/details/79509259