C: Format %s expects argument of type char* in funny strings program -
i making program check funny strings. understand exercise read this.
my code here:
#define max_str_length 10 char* reverse(char *str) { char *reversedstr = malloc(strlen(str)); (int = 0; < max_str_length; i++) { (int j = max_str_length - 1; j > 0; j--) { reversedstr[i] = str[j]; } } return reversedstr; } int isfunny(char *str, char *reversedstr) { (int = 1; < max_str_length; i++) { if (str[i] - str[i - 1] != reversedstr[i] - reversedstr[i - 1]) { return 0; } } return 1; } int main() { /* enter code here. read input stdin. print output stdout */ int numberofstrings; scanf("%i", &numberofstrings); char **strings; (int = 0; < numberofstrings; i++) { scanf("%s", &strings[i]); } char **reversedstrings; (int = 0; < numberofstrings; i++) { reversedstrings[i] = reverse(strings[i]); } (int = 0; < numberofstrings; i++) { if (isfunny(strings[i], reversedstrings[i])) { printf("funny\n"); } printf("not funny\n"); } return 0; }
the error getting following:
solution.c: in function 'main': solution.c:35:9: warning: format '%s' expects argument of type 'char *', argument 2 has type 'char **' [-wformat=] scanf("%s", &strings[i]);
i don't understand why though.
my aim make array of strings, called strings, , store there strings read. why strings[i] char** ?
i appreciate or tips.
thanks!
apparently have char *
, passing it's address, wrong, scanf()
wants char
pointer each "%s"
specifier, , fix code use
char string[10]; scanf("%s", string);
the array automatically becomes char
pointer when passed scanf()
above, that's not enough.
your array of char
suggest of fixed size, , if wasn't, using scanf()
dangerous, suppose each array in array of char
arrays has 10
elements, each string want read must have 9
characters, can instruct scanf()
stop reading when read 9
characters this
scanf("%9s", strings[i]);
if don't this, reading characters possible, illegal, causing what's called undefined behavior.
if want array of strings, of 5
strings 9
characters each, can try
char strings[5][10]; int i; (i = 0 ; < 5 ; ++i) scanf("%9s", strings[i]);
note: need &
address of operator example, when pass int
value, because scanf()
modifes data pointed passed pointer, need make pointer int
variable want scan value, use &
address of operator, since pass pointer containing address of variable.
suggestion: check return value of malloc()
, returns null
on failure, , dereferencing null
poitner, undefined behavior, must careful not cause undefined behavior because it's hard debug.
Comments
Post a Comment