首页 > 解决方案 > 如何从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;
}

标签: c

解决方案


“空”字符串只是第一个字节为零的字符串,因此您可以编写:

s[0] = 0;

但是,目前尚不清楚您要做什么。"foo"和的 LCP"fob""fo",而不是空字符串。

您也可以在找到第一个不匹配的字符后立即返回,无需走到最后。

此外,您可以简单地将输出字符串作为参数传递并lcp成为一个数组。这样你就可以避免mallocand free

char lcp[MAX_LEN];
...
find_LCP(lcp, str1, str2);

推荐阅读