#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
之后。请澄清
由于
答案 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时,它将永远循环,因为没有|
个字符。这种情况一直持续到发生可怕和不确定的事情为止。