c - 如何获得返回字符串的函数?

标签 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;
}

最佳答案

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

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

这并不理想,因为它可能会造成内存泄漏。事实上,您的代码会泄漏一个字符串,因为您永远不会释放 malloc 中分配的内容。

您应该通过捕获返回值并在完成后调用 free 来修复泄漏,或者使用 buffer+length 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
}

关于c - 如何获得返回字符串的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29223545/

相关文章:

c - 如何获取选项卡项的TCITEM结构?

c - 这段程序代码有什么错误?

c - .NET 开发人员*真的*应该花时间学习 C 以进行低级接触吗?

c - 如何访问 C 中 .size 指令设置的符号大小

c - Linux system() 和信号处理程序导致竞争条件?

c# - DirectX:绘制像素的最快方式

c - 如何在数组中使用 fprintf?

c - 将 char 赋值给 int

c - 为什么++(*p) 没有给出 l-value required 错误?

c - 未初始化的局部变量是静态的吗?