Недавно я смутился, объясняя коллеге, почему
char a[100];
scanf("%s", &a); // notice a & in front of 'a'
очень плохой и что немного лучший способ сделать это:
char a[100];
scanf("%s", a); // notice no & in front of 'a'
Ok. Для всех, готовых рассказать мне, почему scanf не должен использоваться в любом случае по соображениям безопасности: легкость. Этот вопрос на самом деле касается значения "& a" vs "a".
Дело в том, что после того, как я объяснил, почему он не должен работать, мы попробовали его (с gcc), и он работает =)). Я быстро провел
printf("%p %p", a, &a);
и дважды печатает тот же адрес.
Может кто-нибудь объяснить мне, что происходит?