功能警告C:“警告:'char_array'的类型默认为'int'”

时间:2016-02-25 00:44:21

标签: c function-parameter

#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

我看到了这个答案warning: return type defaults to ‘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,){...

5 个答案:

答案 0 :(得分:3)

您没有在

中为char_array提供数据类型
int myprint(char_array)

你需要char *或任何你想要的东西。

答案 1 :(得分:3)

首先,函数定义应该像

return-type function-name ( parameter-type parameter-name, parameter-type parameter-name)
{ ... }

您未指定参数类型或参数名称。如果你的意思是char_array表示一个类型,你需要首先使用typedef或struct或其他东西来定义它。如果您的意思是char_array是参数名称,则需要指定其类型,如

char[] char_array

说。此外,在这种情况下,您实际上并未在函数myprint中的任何位置使用变量char数组。所以论证&#34; sup&#34;没有被使用。

编辑问题后:

尝试

char str[] = "sup";
myprint(str);

代替。据我所知,你不能按值传递字符串(字符数组)。

答案 2 :(得分:3)

正如其他人所指出的那样,您没有为char_array指定类型,因此假定它是int。将其更改为char char_array[]可解决此问题。

您的另一个问题是您正在将字符串常量("sup")传递给此函数,然后尝试对其进行修改。字符串常量存储在内存的只读部分,因此您无法对其进行修改。

鉴于您只使用换行符打印字符串,您可以改为:

void myprint(char mystring[]){
    printf("%s\n", mystring);
}

答案 3 :(得分:2)

int myprint(char_array)

type 的参数名称为char_array?因为您没有指定它,编译器认为它是int。幸运的是,它会警告你。

但是,不要依赖这种行为。 (例如,我不知道这在C11中是否仍然合法)只需编写正确的函数声明,包括参数类型。

答案 4 :(得分:2)

您需要指定希望传递给函数的参数类型。功能也有错误。 char_array属于char*类型。您需要将传递的数组的每个部分复制到本地数组,然后只能调用printf才能使此函数正常工作