将参数传递给函数时的警告

Warnings when passing arguments to a function

所以我有一个代码可以正常工作,但我收到“警告:从不兼容的指针类型传递 'outsideBettingHistory' 的参数 2”,这是为什么呢? 我的项目很大,所以我只会重写起到warning作用的部分,所以大家可以自己粘贴,同样的错误。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct Bet {
    char* bets[3][2];
} Bet;

void outsideBettingHistory(int x, char betChosen[0][10], bool won, int result) {
    //You can ignore what is inside this function
    FILE *f;
    f = fopen("bettingHistory.txt", "a");
    if(!f) {
        printf("\nThe bettingHistory.txt not found or unable to open");
        exit(0);
    }
    if(won) {
        fprintf(f, "%s %s", "Bet type: ", betChosen[0]);
        fprintf(f, ". Won %d credits\n", result);
    }
    if(!won) {
        fprintf(f, "%s %s", "Bet type: ", betChosen[0]);
        fprintf(f, ". Lost %d credits\n", result);
    }
    fclose(f);
}

int betColours(int balance, Bet* betTypes) {
      //A lot of stuff that have nothing to do with the warning

      int typeOfBet = 0; //This is the example of 3 variables that this function would give to the outsideBettingHistory(); function
      bool won = false;
      int resultAmount = 8;

      outsideBettingHistory(typeOfBet, betTypes->bets[0][typeOfBet], won, resultAmount);
      return balance;
}


int main() {
     int balance = 100;
     Bet betTypes = { .bets={{"Red", "Black"}, {"Even", "Odd"}, {"1 to 18", "19 to 36"}}};
     betColours(balance, &betTypes);
}

此外,对于 void outsideBettingHistory(int x, char betChosen[0][10], bool won, int result),我收到“注意:预期 'char (*)[10]' 但参数类型为 'char *'”,我该如何摆脱这些警告?

在本次通话中

outsideBettingHistory(typeOfBet, betTypes->bets[0][typeOfBet], won, resultAmount);

第二个参数的类型为 char *,因为数据成员 bets 是类型为 char * 的二维指针数组,而您选择了数组的元素 bets[0][typeOfBet]这与 bets[0][0] 相同,因为 typeOfBet 是由 0 初始化的。也就是说,您向函数传递了一个指向字符串文字 "Red".

的第一个字符的指针

但是函数的第二个参数outsideBettingHistory

void outsideBettingHistory(int x, char betChosen[0][10], bool won, int result) {

具有类型 char ( * )[10]

并且类型不兼容。所以编译器报错。

您应该自己决定要传递给函数的内容以及函数应执行的操作。

如果假定函数outsideBettingHistory必须处理字符串文字(二维数组的一个元素),那么声明函数如

void outsideBettingHistory(int x, const char *betChosen, bool won, int result) {