passing argument 1 of 'printf 'makes pointer from integer

45,762

Solution 1

Here

printf(c);

you pass the character instead of a format string as the first argument to printf(). It should be

printf("%c", c);

or alternatively

putchar(c);

Solution 2

I know it's a year later, but keep in mind that # may be used as inline comment by your shell.

So "./box2 5 #" would have argc as 1 and argv as a string array containg only one position: "5".

Anything after # would be discarded before the shell called your program.

Share:
45,762
user3015970
Author by

user3015970

Updated on January 18, 2020

Comments

  • user3015970
    user3015970 over 4 years

    I keep getting this error

    box2.c: In function 'printchars':
    box2.c:26:4: warning: passing argument 1 of 'printf' makes pointer from integer without  a      
    cast [enabled by default]
    /usr/include/stdio.h:363:12: note: expected 'const char * __restrict__' but argument is      
    of type 'char' box2.c:26:4: warning: format not a string literal and no format arguments [-Wformat-security]
    box2.c:39:8: warning: passing argument 1 of 'printf' makes pointer from integer without      a cast [enabled by default]
    /usr/include/stdio.h:363:12: note: expected 'const char * __restrict__' but argument is     of type 'char'
    box2.c:39:8: warning: format not a string literal and no format arguments [-Wformat-  
    security]
    

    When I try to compile this program with gcc

    #include <stdio.h>
    
    void printchars(char c, int n);
    
    int main( int argc, char*argv){
        int n = argv[1];
        char c = argv[2];
        int nn = atoi(n);
        printchars(c, nn);
        return 0;
    }
    
    void printchars(char c, int n){
        int x;
        for (x = n + 2 ; x > 0; x--){
            if (x != 1 && x != n){
                printf(c);
                int count = n;
                while (count - 2 != 0){
                    printf(" ");
                    count--;
                }
            }
            else{
                int num = n;
                while (num != 0){
                    printf(c);
                    num--;
                }
            }
            printf("\n");
        }
    }
    

    I have been trying to figure it out, but keep getting the same error. Any help would be greatly appreciated. The program is meant to print out a box like this given how many and the character that makes it.

        ./box2 5 #
        #####
        #   #
        #   #
        #   #
        #   #
        #####
    
  • user3015970
    user3015970 over 10 years
    That worked but now after I compile it and try to run it I get Segmentation Fault (core dumped)
  • Martin R
    Martin R over 10 years
    @user3015970: That's because there are some more errors in your code: The declaration of main() is wrong, and both int n = argv[1]; and char c = argv[2]; should give compiler warnings or errors. - Perhaps you should try to fix all warnings first. If you need more help, update the question.