C 向函数传递参数时出现警告

C 向函数传递参数时出现警告,c,c-strings,string-literals,function-declaration,C,C Strings,String Literals,Function Declaration,所以我有一个代码,它是如何工作的,但我得到了“警告:从不兼容的指针类型传递'outsideBettingHistory'参数2”,这是为什么? 我的项目很大,所以我只会重写在警告中起作用的部分,这样你就可以自己粘贴它,并得到相同的错误 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef struct Bet { char* bets[3][2]; } Bet; vo

所以我有一个代码,它是如何工作的,但我得到了“警告:从不兼容的指针类型传递'outsideBettingHistory'参数2”,这是为什么? 我的项目很大,所以我只会重写在警告中起作用的部分,这样你就可以自己粘贴它,并得到相同的错误

#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);
}
#包括
#包括
#包括
typedef结构赌注{
字符*下注[3][2];
}打赌;
void outsideBettingHistory(整数x,字符[0][10],布尔元,整数结果){
//您可以忽略此函数中的内容
文件*f;
f=fopen(“bettingHistory.txt”,“a”);
如果(!f){
printf(“\nBettingHistory.txt未找到或无法打开”);
出口(0);
}
如果(韩元){
fprintf(f,“%s%s”,“下注类型:”,选择[0]);
fprintf(f,“.Won%d学分\n”,结果);
}
如果(!赢){
fprintf(f,“%s%s”,“下注类型:”,选择[0]);
fprintf(f,“.损失%d个学分\n”,结果);
}
fclose(f);
}
整数倍颜色(整数倍,下注*betTypes){
//很多与警告无关的东西
int-typeOfBet=0;//这是此函数将给outsideBettingHistory()函数的3个变量的示例
布尔元=假;
int resultAmount=8;
外围投注历史记录(投注类型,投注类型->投注[0][投注类型],赢,结果数);
收益余额;
}
int main(){
国际收支平衡=100;
下注类型={.bets={“红色”、“黑色”}、{“偶数”、“奇数”}、{“1到18”、“19到36”};
Betcolors(平衡型和betTypes);
}
另外,对于
void outsideBettingHistory(int x,char betselected[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
初始化的。即向函数传递一个指向字符串literal
“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) {

传递具有函数所需类型的参数。问问你自己:你的功能期望什么?您正在传递什么?错误消息是否不清楚?该函数需要一个指向10个字符数组的指针,但您正在向它传递一个
char*
。您需要传递正确类型的变量,或者更改函数以采用不同类型的参数。Norbertas,是否确实要在
outsideBettingHistory()中使用
BetSelected[0]
两次?它会影响最佳答案。那么如何更改第二个参数
void outsideBettingHistory(int x,char betselected[0][10],bool-won,int-result)
函数期望的,这样它仍然会得到我传递给它的字符串,我可以使用它将其打印到.txt文件中?抱歉,指针是我的缺点,我只是不知道如何更改该参数,所以我仍然得到字符串并去掉warning@Norbertas将其更改为const char*betselected。除非您要访问传递的字符串literal的字符,否则不要在带有thgis指针的函数中使用下标运算符谢谢@诺伯塔斯:没有。不客气。:)