题目要求是: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语言局部变量的。点击打开链接