重建索引后缓冲区变为NULL

时间:2010-10-12 05:19:05

标签: c

#include <stdio.h>
#include <stdlib.h>
char *color[] =
{
    /*0*/"red||bluegreen",
    /*1*/"blue",
    /*2*/"green",
         "\0"
};

int fun1(char * str1)
{
    int c = 0;
    while(1)
    {
        if(str1[c] == '|' && str1[c+1] == '|')
            return c;
        c++;    
    }
    return 0;    
}


1. int main()
2. {
3.  int ret=0, offset=0;
4.  ret = fun1(color[offset]);
5   offset += ret;
6   ret = fun1(color[offset]);

7   return 0;
   }

在第6行main()的上述代码段中,fun1()的参数为color[offset] = NULL 为什么color[offset] = NULL在操作offset += ret之后。请澄清

由于

2 个答案:

答案 0 :(得分:3)

此处fun1 ret = fun1(color[offset]);的第一次通话会将3作为color[0][3]color[0][4]同时返回|

然后您将ret添加到offset,使其成为3

在下一次调用fun1时,您传递color[offset]color[3]"\0",请注意 {{ 1}}它是一个仅包含NULL字符的字符串文字。

澄清:

nul

答案 1 :(得分:0)

当您添加到偏移量时,它将以等于ret的数字前进。因此,它前进3个位置,使其偏移3,因此color[offset] = color[3] = "\0"。然后当你调用fun1时,它将永远循环,因为没有|个字符。这种情况一直持续到发生可怕和不确定的事情为止。