[英]function warnings C: “warning: type of ‘char_array’ defaults to ‘int’”
#include <stdio.h>
#include <string.h>
int myprint(char_array){
char mystring[80];
strcat(mystring, "\n");
printf("%s", mystring);
return 0;
}
int main(int argc, char** argv){
int count = 5;
char letter = 'c';
printf("decimal: %d, char: %c\n", count, letter);
myprint("sup");
return 0;
}
我收到编译警告:
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]$ ./basics
decimal: 5, char: c
我看到以下回答警告:返回类型默认为'int'[-Wreturn-type]但不适用于我,因为我确实声明了int main(...)
我也看到以下函数声明:
return_type function_name( parameter list ) {
body of the function
}
对于myprint
我声明为int
并返回0
。 此警告是什么意思,为什么我的功能不起作用? 谢谢
回答:
void myprint(char mystring[]){
strcat(mystring, "\n");
printf("%s", mystring);
}
使警告安静,但导致Segmentation fault (core dumped)
更改为
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;){...
和
void myprint(char[] mystring,){...
您没有在提供char_array的数据类型
int myprint(char_array)
您需要char *或任何您想要的字符。
首先,函数定义应该像
return-type function-name ( parameter-type parameter-name, parameter-type parameter-name)
{ ... }
您未指定参数类型或参数名称。 如果您将char_array表示为类型,则需要先使用typedef或struct或其他名称进行定义。 如果您将char_array设为参数名称,则需要指定其类型,如下所示
char[] char_array
说。 同样,在这种情况下,您实际上并未在函数myprint中的任何地方使用变量char数组。 因此,根本没有使用参数“ sup”。
编辑问题后:
尝试
char str[] = "sup";
myprint(str);
代替。 据我所知,您不能按值传递字符串(字符数组)。
正如其他人指出的那样,您没有为char_array
指定类型,因此假定它为int
。 将其更改为char char_array[]
可解决此问题。
您的另一个问题是,您要将字符串常量( "sup"
)传递给此函数,然后尝试对其进行修改。 字符串常量存储在内存的只读部分中,因此您无法对其进行修改。
假设您仅使用换行符打印字符串,则可以执行以下操作:
void myprint(char mystring[]){
printf("%s\n", mystring);
}
int myprint(char_array)
哪种类型的名称为char_array
的参数? 因为您没有指定它,所以编译器认为它是一个int
。 幸运的是,它警告您。
但是,不要依赖这种行为。 (例如,我不知道这在C11中是否仍然合法)只需编写正确的函数声明,包括参数类型。
您需要指定期望传递给函数的参数的类型。 函数也有错误。 char_array
是char*
类型。 您需要将传递的数组的每个部分复制到本地数组,然后只能调用printf来使此函数起作用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.