我正在编写C程序,我在函数中使用struct和pointer。一切都适用于Windows,但不是linux debian。当我尝试在Linux Debian中编译我的程序时,我遇到了一些错误。
typedef struct human
{
char name[100],code[100];
}human;
void hello(char* name, char* code)
{}
int main()
{
human human;
hello(&human.name,&human.code);
return 0;
}
我在编译main.c文件时收到了警告:
Warning passing argument 1 of Human from incompatible pointer type Note: expected char *a but argument is type of char(*)[100] Warning passing argument 2 of Human from incompatible pointer type Note: expected char *a but argument is type of char(*)[100]
答案 0 :(得分:4)
typedef struct human
{
char name[100], code[100];
} human;
void hello(char* name, char* code)
{
}
int main()
{
human human;
hello(human.name, human.code);
return 0;
}
在传递&
和name
数组时删除&符号(code
)。 char
数组与char*
兼容。当你说human.name
时,你实际上指的是数组中第一个元素的地址。
此外,如果hello
未返回任何内容,则其返回类型应为void
。如果省略返回类型,则假设为int
,但这是一种非常古老的做法,并且非常劝阻。
在使用GCC进行编译时,总是至少使用-Wall
。最佳实践(您应该尽快习惯):
gcc -Wall -Wextra -Werror foo.c
最后,使用适当的缩进!
答案 1 :(得分:0)
错误基本上意味着您将数组的地址传递给期望char
数组的函数。
human.name
的类型是char [100]
,即大小为100的char
数组。当您将其作为human.name
传递给函数时,它会衰减到该数组的基址其类型为char*
。所以,一切都很好,你实际上只想要这种行为。
现在,您尝试传递&human.name
,这意味着您尝试将human.name
数组的地址传递给函数,该函数的类型为char (*) [100]
(指向{{1}的指针大小为100的数组),因此发生类型不匹配。