功能警告C:";警告:类型为‘;字符数组’;默认为‘;int’&引用;
它可以编译,但my功能警告C:";警告:类型为‘;字符数组’;默认为‘;int’&引用;,c,function-parameter,C,Function Parameter,它可以编译,但mymyprint函数不起作用: cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ compile basics.c basics basics.c: In function ‘myprint’: basics.c:4:5: warning: type of ‘char_array’ defaults to ‘int’ int myprint(char_array){ ^ 我看到了这个答案,但不适用于我,
myprint
函数不起作用:
cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ compile basics.c basics
basics.c: In function ‘myprint’:
basics.c:4:5: warning: type of ‘char_array’ defaults to ‘int’
int myprint(char_array){
^
我看到了这个答案,但不适用于我,因为我确实声明了intmain(…)
我还看到了以下功能声明:
cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ ./basics
decimal: 5, char: c
对于myprint
我声明采用int
并返回0
。这个警告是什么意思?为什么我的函数不能工作?多谢各位
答复:
return_type function_name( parameter list ) {
body of the function
}
使警告静音,但会导致分段故障(堆芯转储)
改为
void myprint(char mystring[]){
strcat(mystring, "\n");
printf("%s", mystring);
}
更糟糕的是:
void myprint(char[] mystring){
strcat(mystring, "\n");
printf("%s", mystring);
}
我也试过了
cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ cc -std=c99 -Wall basics.c -o basics
basics.c:4:21: error: expected ‘;’, ‘,’ or ‘)’ before ‘mystring’
void myprint(char[] mystring;){
^
basics.c: In function ‘main’:
basics.c:15:5: warning: implicit declaration of function ‘myprint’ [-Wimplicit-function-declaration]
myprint("sup");
^
及
您没有为中的字符数组提供数据类型
void myprint(char[] mystring,){...
你需要char*或任何你想要的东西
int myprint(char_array)
什么类型的参数名为char\u array
?因为您没有指定它,编译器假定它是int
。幸运的是,它在警告你这一点
不过,不要依赖这种行为。(例如,我不知道这在C11中是否仍然合法)只需编写正确的函数声明,包括参数类型。您需要指定希望传递给函数的参数类型。函数中也有错误
char\u数组
属于char*
类型。您需要将传递的数组的每个部分复制到本地数组中,然后才能调用printf使此函数工作。首先,函数定义如下
int myprint(char_array)
您没有指定参数类型或参数名称。如果将char_数组表示类型,则需要首先使用typedef或struct或其他方法定义它。如果要将char_数组作为参数名,则需要指定其类型,如下所示
return-type function-name ( parameter-type parameter-name, parameter-type parameter-name)
{ ... }
说。此外,在本例中,实际上在函数myprint中的任何位置都不使用变量char数组。因此,根本没有使用参数“sup”
编辑问题后:
试一试
相反。据我所知,不能通过值传递字符串(字符数组)。正如其他人指出的,您没有为
char\u数组指定类型,因此假定它是int
。将其更改为char\u array[]
可以解决此问题
另一个问题是,您正在将字符串常量(“sup”
)传递给此函数,然后试图修改它。字符串常量存储在内存的只读部分,因此您无法修改它
如果您只打印带有换行符的字符串,则可以执行以下操作:
char str[] = "sup";
myprint(str);
更改为char\u-array*
然后再更改char\u-array[]
对它们都没有帮助。我现在看到了不匹配的情况,但更改语法使情况变得更糟,请参阅above@codyc4321请在上面的编辑之后尝试我的建议。那么如何手动添加\n?在函数内部创建一个新命名的变量并添加\n?@codyc4321您可以,但如果在函数外部看不到更改,则使用临时变量没有意义。其中有一个任性的分号:void myprint(char[]mystring;){
return-type function-name ( parameter-type parameter-name, parameter-type parameter-name)
{ ... }
char[] char_array
char str[] = "sup";
myprint(str);
void myprint(char mystring[]){
printf("%s\n", mystring);
}