【问题标题】:Function receive char array as parameter and return char array函数接收 char 数组作为参数并返回 char 数组
【发布时间】:2014-06-27 11:58:06
【问题描述】:

我正在尝试制作一个“Truco”游戏,但它处于起步阶段,但我对 C 语言没有太多经验。

我正在尝试创建一个函数,它接收一个 char(字符串)数组并返回另一个 char 数组。

我在编译代码时收到以下错误:

276 [Warning] passing arg 1 of `retornaMaior' from incompatible pointer type

以下是代码的相关部分:

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>

// const

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

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;
                }
            }
        }
    }
    char *carta = "YY";
    carta[0] = cartas_jogo[posMaior];
    a++;
    carta[1] = cartas[posA];
    return carta;
}

int main()
{
    char carta_jogada[3];
    printf("\n\nDigite uma de suas cartas para jogar: ");
    scanf("%s", &carta_jogada);

    // conferir length carta jogada
    // conferir se tem carta jogada
    char mesa_jog1[] = {'Y','Y','\0'};
    mesa_jog1[0] = carta_jogada[0];
    mesa_jog1[1] = carta_jogada[1];

    char jog2_carta1[] = {'Q','C','\0'};

    char cartas[7];
    cartas[0] = jog2_carta1[0];
    cartas[1] = jog2_carta1[1];
    cartas[2] = jog2_carta2[0];
    cartas[3] = jog2_carta2[1];
    cartas[4] = jog2_carta3[0];
    cartas[5] = jog2_carta3[1];
    cartas[6] = '\0';

    printf("%s", retornaMaior(&cartas,mesa_jog1[0]));
    getch();
}

这是代码的一小部分,但我认为这已经足够你们帮助我了。

【问题讨论】:

  • 在对retornaMaior(&amp;cartas,mesa_jog1[0])的调用中松开&amp;应该是retornaMaior(cartas,mesa_jog1[0])
  • 当我这样做时,编译器没有显示错误,但是当我输入一个值时它停止工作......
  • 请注意 cartsas 在 main 中分配了堆内存与 char *carta='YY'; 和后面的几行不同。您正在分配一个字符串文字,然后尝试返回它。有你的错误。

标签: c arrays function return


【解决方案1】:

很多问题:

demo.c:68:5: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[3]’ [-Wformat]
demo.c:81:17: error: ‘jog2_carta2’ undeclared (first use in this function)
demo.c:81:17: note: each undeclared identifier is reported only once for each function it appears in
demo.c:83:17: error: ‘jog2_carta3’ undeclared (first use in this function)
demo.c:87:5: warning: passing argument 1 of ‘retornaMaior’ from incompatible pointer type [enabled by default]
demo.c:26:7: note: expected ‘char *’ but argument is of type ‘char (*)[7]’

还有更多...

char *carta = "YY";
carta[0] = cartas_jogo[posMaior];  /* Error: carta is a string literal (read only) */
a++;
carta[1] = cartas[posA]; /* Error: carta is a string literal (read only) */
return carta;

最后:

printf("%s", retornaMaior(&cartas,mesa_jog1[0]));

应该是

printf("%s", retornaMaior(cartas,mesa_jog1[0]));

因为cartas 是(衰减成)一个指针

【讨论】:

  • 好的,但是我该如何解决这种问题,比如预期的'char ',但参数的类型是'char ()[7]'
  • 你使用retornaMaior(cartas,... 解决这个问题注意cartas 没有&amp;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多