warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)’

l00kitsjake picture l00kitsjake · May 15, 2013 · Viewed 56.4k times · Source

I am trying to run a simple C program but I am getting this error:

warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[20]’

Running Mac OSX Mountain Lion, compiling in terminal using gcc 4.2.1

#include <stdio.h>

int main() {
    char me[20];

    printf("What is your name?");
    scanf("%s", &me);
    printf("Darn glad to meet you, %s!\n", me);

    return (0);
}

Answer

MOHAMED picture MOHAMED · May 15, 2013
scanf("%s",&me);

should be

scanf("%s",me);

Explaination:

"%s" means that scanf is expecting a pointer to the first element of a char array. me is an object array and could evaluated as pointer. So that's why you can use me directly without adding &. Adding & to me will be evaluated to ‘char (*)[20]’ and your scanf is waiting char *

Code critic:

Using "%s" could cause a buffer overflow if the user input string with length > 20. So change it to "%19s":

scanf("%19s",me);