首页 > 解决方案 > 如何更改返回局部变量的函数

问题描述

我应该如何更改变量BinaryNumber,所以该函数不会给我警告消息。我知道我无法返回内存的局部变量地址。我应该使用malloc还是您认为我应该如何更改变量BinaryNumber以便可以返回它?

char *Functoin_chang_string_ToBinary(char *Line) {
    char *space = " ", *point = ",";
    char BinaryNumber[Array_Size] = { "000000000000000" };
    char *word = strtok(Line,"\"");
    int num = 0, flag = 2, j = 11;
    for (int i = 0; i < strlen(Line) - 1; i++) {
        if (word[i] == '"') {
            flag--;
            i++;
        }
        num = word[i];
        j = 14;
        while (num != 0) {
            BinaryNumber[j--] += (num % 2);
            num /= 2;
        }
        printf("%s\n", BinaryNumber);
        Fill_Struct_Binary_Machine_Code("", BinaryNumber);
        strcpy(BinaryNumber, "000000000000000");
    }
    printf("%s\n", BinaryNumber);
    Fill_Struct_Binary_Machine_Code("", BinaryNumber);

    return BinaryNumber;
}

标签: c

解决方案


尽管您可以使用malloc()BinaryNumber字符串分配缓冲区(当然,这需要由调用者使用释放free()),但更简单的方法是使用该strdup()函数。

这将分配复制作为其参数(包括终止符)给出的字符串所需的确切内存量,并在一次调用中复制实际的字符串数据。nul

因此,您可以将函数的 return 语句更改为:

    return strdup(BinaryNumber);

当然,调用者在使用完返回的数据后仍然需要调用free()它(strdup以与函数兼容的方式分配内存malloc)。


推荐阅读