如何获取函数返回一个字符串?

时间:2015-03-24 01:37:11

标签: c

我们如何从函数返回一个字符串?

我刚刚开始学习使用字符串函数和malloc,基本上,我试图获得:

  

ef = 11101111

作为输出。

这是我尝试过的。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

const int MAXWORD = 2; 
char hexToBinary(char hex[MAXWORD]);

int main()
{   
char hex[MAXWORD] = {'e','f'};

printf("%s = %s\n", hex, hexToBinary(hex));

return 0;
}

char hexToBinary(char hex[MAXWORD]) 
{
char *hexToBn = malloc( (MAXWORD-1) * sizeof(char) );
char *convertedString = malloc( (MAXWORD-1) * sizeof(char) );

for(int i=0 ; i<MAXWORD ; ++i)
{   
    if(hex[i] == 'e' || hex[i] == 'E')
    {
        strcpy(hexToBn, "1110");
    }
    if(hex[i] == 'f' || hex[i] == 'F')
    {
        strcpy(hexToBn, "1111");
    }

    strcat(convertedString, hexToBn);
}

return convertedString;
}

3 个答案:

答案 0 :(得分:2)

如果您想创建一个返回C字符串的函数,请声明它返回char*

char *hexToBinary(char hex[MAXWORD]) {
    ...
}

这不太理想,因为它会造成内存泄漏。实际上,您的代码会泄漏一个字符串,因为您永远不会free malloc中分配的内容。

您应该通过捕获返回值来修复泄漏,并在完成后调用free,或者使用缓冲区+长度API模式:

char *bin = hexToBinary(hex);
printf("%s = %s\n", hex, bin);
free(bin);

替代API看起来像这样:

void hexToBinary(char hex[], char bin[], int len) {
    ... // Users pass the output buffer bin and its length len
}

答案 1 :(得分:1)

如何做到这一点:

1:在堆上分配字符串并将其传递给调用者。调用者确保使用free删除字符串。

char * get_str()
{
    char * str = malloc(string_length + 1);
    // Do something
    return str;
}

2:将字符串传递给函数

void update_string(char * input, int length)
{
     // modify string
}

答案 2 :(得分:-1)

将返回类型声明为char*。然后像你一样使用它。

注意:您可能需要对代码执行其他操作。我只是说了一眼我看到的第一件事。此外,您需要确保在完成后使用free取消分配内存。