Search code examples
cfunction-parameter

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;

}

I get warnings on compile:

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){
     ^

It compiles, but my myprint function doesn't work:

cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ ./basics 
decimal: 5, char: c

I see this answer warning: return type defaults to ‘int’ [-Wreturn-type] but doesn't apply to me since I did declare int main(...)

I also see this declaration of functions:

return_type function_name( parameter list ) {
   body of the function
}

And for myprint I declare as taking int and return 0. What does this warning mean and why doesn't my function work? Thank you

ANSWER:

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

}

quiets the warnings, but causes Segmentation fault (core dumped)

Changing to

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

}

makes it worse:

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");
     ^

I also tried

void myprint(char[] mystring;){...

and

void myprint(char[] mystring,){...

Solution

  • As others have pointed out, you didn't specify a type for char_array, so it is assumed to be int. Changing it to char char_array[] fixes this.

    Your other problem is that you're passing a string constant ("sup") to this function and are then attempting to modify it. String constants are stored in a read-only section of memory, so you can't modify it.

    Given that you're only printing the string with a newline, you can do this instead:

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