一个简单的函数
char *strstr(const char *s1, const char *s2)
{
int n;
if (*s2)
{
while (*s1)
{
for (n=0; *(s1 + n) == *(s2 + n); n++)
{
if (!*(s2 + n + 1))
return (char *)s1;
}
s1++;
}
return NULL;
}
else
return (char *)s1;
}
求大神指教6行以后是什么意思,本人新手
[解决办法]
char *strstr(const char *s1, const char *s2)
{//函数 判断S1从开始位置开始,是否包含S2子串,是则返回*s1,否则返回NULL
int n;//用于字符串循环
if (*s2)
{//*s2不为空
while (*s1)
{//循环直到*s1为空,及S1字符串结束
for (n=0; *(s1 + n) == *(s2 + n); n++)
{//S1字符串从开始位置开始与S2相同的字符
if (!*(s2 + n + 1))
//S2结束,表示S1从第一个字符开始包含S2子串
return (char *)s1;
}
s1++;
}
//表示S2长度大于S1,及S1从第一个字符开始不包含子串S1
return NULL;
}
else
//S2为空
return (char *)s1;
}
[解决办法]
艰涩的代码通常不是被读懂而是被单步调试懂的。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!