Я знаю, что приведенный ниже код недействителен, поскольку %s
ожидает аргумент типа char *
, но я указал аргумент типа char **
.
#include <stdio.h>
struct employee
{
int id;
char name[20];
float salary;
};
int main(void)
{
struct employee e;
scanf("%19s", &e.name);//Invalid line
printf("%s", e.name);
}
Но я получаю другое предупреждение:
./ Playground / file0. c: In function main:. / Playground / file0. c: 11: 15: warning: format '% s' expects argument of type' char * ', but argument2 has type char (*) [20]' [- Wformat =] 11 | scanf ("% 195", & e. name); | char (*) [20] char *
Я почти уверен, что char **
и char (*)[20]
в некоторой степени эквивалентны, но не уверен, как они.
char **
: указатель на указатель на char.
char (*)[20]
: массив указателей на char. - Не уверен, что я здесь совершенно прав.
Я не понимаю. Насколько они эквивалентны? Просвети меня, пожалуйста.