繁体   English   中英

函数警告C:“警告:'char_array'的类型默认为'int'”

[英]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_arraychar*类型。 您需要将传递的数组的每个部分复制到本地数组,然后只能调用printf来使此函数起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM