我有一个名为"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;
}
答案 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)'。