for循环中的return语句

时间:2016-05-12 18:44:22

标签: c for-loop return

//////

char* duplicate(char* string, int count)
{
    char* duped = (char*) malloc( sizeof(char)*(count*strlength(string)+1) );
    int i=0,j=0,t=0;
    for( i=0; i<count*strlength(string); i++,j++ )
    {   
        if (j==(strlength(string))) 
        {
            j=0; 
            t++;
        }

        if (t==count) 
        {
            duped[i] = '\0'; 
            break;
        }

        duped[i] = string[j];
    }

    return duped;
}

上面的代码工作正常,但下面的代码给出了分段错误。他们之间有什么区别?当看到返回时,函数不应该停止吗?

char* duplicate(char* string, int count)
{
    char* duped = (char*) malloc( sizeof(char)*(count*strlength(string)+1) );
    int i=0,j=0,t=0;
    for( i=0; i<count*strlength(string); i++,j++ )
    {   
        if (j==(strlength(string))) 
        {
            j=0; 
            t++;
        }

        if (t==count) 
        {
            duped[i] = '\0'; 
            return duped;
        }

        duped[i] = string[j];
    }
}

1 个答案:

答案 0 :(得分:1)

如果string为0长度或count为0,该怎么办?在第二种情况下,您不返回值。

这应该是一个编译器警告,并且可能会导致崩溃,因为它会返回它想要的任何内容。

修改

好的,问题更深入了 - 你永远不会得到代码中那些在for循环中设置'\ 0'的部分与那些初始条件(“zoom”和3)。因此,您的字符串也可能没有设置终结符,具体取决于malloc的感觉。如果有字符串,即使退出for循环,也需要设置NUL值。这就是为什么第二个失败而不是第一个 - 它确实错过了返回声明。