![](/img/trans.png)
[英]Cannot assign the return value of ftell function to a char array size
[英]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.