将函数返回给char数组变量

时间:2014-05-12 17:03:10

标签: c arrays return variable-assignment

我有一个名为"retornaMaior"的函数,它返回char array,我想将此返回值分配给一个新的变量,如:

char variable[] = retornaMaior();

有没有办法做到这一点?如果有,我该怎么做?

我正在考虑将“变量”声明为像“cartas_jogo”这样的全球,但我不知道它是否正确。

以下代码:

char cartas_jogo[] = "4567QJKA23";
char naipes_jogo[] = "ZCEO";
char carta_retorno[2];

int retornaIndice(char carta)
{
    int a = 0;
    int retorno = 0;
    for (a=0; a<strlen(cartas_jogo); a++)
    {
        if (carta==cartas_jogo[a])
        {
            retorno = a;
        }
    }
    return retorno;
}

char *retornaMaior(char *cartas, const char carta_comp)
{
    int posCartaComp = retornaIndice(carta_comp);
    int a = 0;
    int posMaior = 0;
    int tem = 0;
    int posA = 0;
    for (a=0; a<6; a+=2)
    {
        int posCarta = retornaIndice(cartas[a]);
        if (tem == 0)
        {
            if (posCarta>posCartaComp)
            {
                posMaior = posCarta;
                posA = a;
                tem = 1;
            }
        }
        else
        {
            if (posCarta<posMaior)
            {
                if (posCarta>posCartaComp)
                {
                    posMaior = posCarta;
                    posA = a;
                }
            }
        }
    }
    carta_retorno[0] = cartas_jogo[posMaior];
    posA++;
    carta_retorno[1] = cartas[posA];
    if (tem==0)
    {
       carta_retorno[0] = '0';
       carta_retorno[1] = '0';
    }
    return carta_retorno;
}

1 个答案:

答案 0 :(得分:3)

char variable[] = retornaMaior();

可能不起作用。代替:

char *variable = retornaMaior();

仍然可以作为数组进行处理:

printf("%c\n", variable[1]);

在'retornaMaior()'函数中,您需要将返回的值放入可以返回的内存中。使用全局变量'carta_retorno'可能会起作用;但有更好的方法。

另一种选择是将一些“堆”内存分配给返回值。为此,从全局存储中移动'carta_retorno',并将其移到'retornaMaior()'函数中:

char carta_retorno[2];              // ---

char *retornaMaior(char *cartas, const char carta_comp)
   {
   int posCartaComp = retornaIndice(carta_comp);
   int a = 0;
   int posMaior = 0;
   int tem = 0;
   int posA = 0;

   char *carta_retorno = malloc(2);   // +++

如'staticx'所示,确保malloc()成功非常重要:

   if(NULL == carta_retorno)
      ...

现在,'retornaMaior()'函数将在已分配的内存中返回结果(而不是使用全局存储)。

不要忘记,当不再需要返回值时,'cp = retornaMaior()'的调用者需要调用'free(cp)'。