将参数传递给函数时的警告
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) {
所以我有一个代码可以正常工作,但我收到“警告:从不兼容的指针类型传递 '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) {