c - 如何从C中的函数返回空字符串?
问题描述
我应该如何从函数返回一个空字符串?我尝试使用lcp[i] = ' '
,但它会产生错误。然后我使用lcp[i] = 0
它返回一个空字符串。但是,我不知道这是否正确。
另外,是否有必要free(lcp)
在调用者函数中使用?因为我不能同时释放和返回。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 50
char *find_LCP(char str1[], char str2[]);
char *find_LCP(char str1[], char str2[]){
char * lcp = malloc(MAX_LEN * sizeof(char));
int a = strlen(str1);
int b = strlen(str2);
int min = a < b ? a : b;
for(int i = 0; i < min; i++){
if(str1[i] == str2[i])
lcp[i] = str1[i];
else
lcp[i] = 0;
}
return lcp;
}
int main()
{
char str1[MAX_LEN], str2[MAX_LEN];
char * lcp;
printf("Enter first word > ");
scanf("%s", str1);
printf("Enter second word > ");
scanf("%s", str2);
lcp = find_LCP(str1, str2);
printf("\nLongest common prefix: '%s'\n", lcp);
free(lcp);
return 0;
}
解决方案
“空”字符串只是第一个字节为零的字符串,因此您可以编写:
s[0] = 0;
但是,目前尚不清楚您要做什么。"foo"
和的 LCP"fob"
是"fo"
,而不是空字符串。
您也可以在找到第一个不匹配的字符后立即返回,无需走到最后。
此外,您可以简单地将输出字符串作为参数传递并lcp
成为一个数组。这样你就可以避免malloc
and free
:
char lcp[MAX_LEN];
...
find_LCP(lcp, str1, str2);
推荐阅读
- r - geom_dumbbell 图不继承 aes
- ionic-framework - Sending String command to BLE in Ionic
- amazon-web-services - 在 Terraform 中有条件地添加 MQ 代理用户
- ruby - Ruby class variable used like class instance variable
- c++ - C++,检测鼠标是否空闲(短时间,20ms)
- javascript - Adjust top of div after load
- c# - 将方法作为参数传递并让它订阅函数内的事件?
- python - Python:从两个列表中制作一个 csv
- java - 不存在类型变量 T 的实例,因此 ID 符合 Comparable
- string - 使用扩展函数将字符串中的每个单词大写