LeetCode Longest Common Prefix

题目要求是:Write a function to find the longest common prefix string amongst an array of strings.即返回一组字符串的共有前缀。

以下源码可以通过:

char* longestCommonPrefix(char** strs, int strsSize) {
    if(strsSize==0)
    {
        return "";
    }   
    int i,j;
    char *res;
    for(i=0;strs[0][i]!=0;i++)
    {
        for(j=1;j<strsSize;j++)
        {
            if(strs[0][i]!=strs[j][i])
            {
                res=(char *)malloc(i+1);
                memcpy(res,strs[0],i);
                res[i]=0;
                return res;
            }
        }
    }
    return strs[0];
}

题目依旧不难,只是中途还是有些疑惑。

最初我认为[]输入对应的是strs==NULL,即是下面这样的代码:

    if(strs==NULL)
    {
        return "";
    } 
不管代码返回的什么,得到的输出都是啥都没有(显示Runtime Error),而预期结果应该是"",有点想不通,百度了一下别人的代码,发现人家判断的是strsSize,所以就是这里的[]对应的strs其实不是NULL,究竟是什么?想来还是自己的基础不扎实,有些东西没分清楚。

稀里糊涂地去查了C语言如何返回一个空字符串,然后get了一些基础知识。

(1)空字符串对应的是"",即只有一个终止符'\0'的字符串,与NULL不同,NULL没有分配存储空间。

(2)不能直接返回一个局部变量字符串:char a[]="";return a;,但可以返回动态分配的字符串指针,交给调用函数去释放就行了:char *a=(char *)malloc(1);a[0]='\0';return a;。然后还发现其实是可以返回常量的地址的,常量并不是局部变量,存放在静态存储区中,并不会随着子函数返回而释放,即如上直接return "";或是char *p=""; return p;都是可以的。

(3)最后附上一个找到的有用的CSDN博客链接,关于C语言局部变量的。点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值