Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何让函数返回字符串?_C - Fatal编程技术网

C 如何让函数返回字符串?

C 如何让函数返回字符串?,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'}

如何从函数返回字符串

我刚刚开始学习使用字符串函数和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;
}
#包括
#包括
#包括
常量int MAXWORD=2;
char hexToBinary(char hex[MAXWORD]);
int main()
{   
字符十六进制[MAXWORD]={'e','f'};
printf(“%s=%s\n”,十六进制,十六进制二进制(hex));
返回0;
}
char hexToBinary(char hex[MAXWORD])
{
char*hexToBn=malloc((MAXWORD-1)*sizeof(char));
char*convertedString=malloc((MAXWORD-1)*sizeof(char));

对于(int i=0;i将返回类型声明为
char*
。然后像使用一样使用它


注意:您可能需要对代码执行其他操作。我刚刚说了我一眼看到的第一件事。此外,您需要确保在使用完内存后,您的内存被释放为可用的。

如果您想创建一个返回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
}
有两种方法可以做到这一点:

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
}
1) 使用
convertedString=malloc((MAXWORD*4+1);
2)
*convertedString=0
;3)其他问题3)
char-hex[MAXWORD+1]={e'、'f'、'\0'};
4)其他问题