簡體   English   中英

將函數賦值給char數組變量

[英]Assign function return to char array variable

我有一個稱為"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;
}
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)”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM