||
создает int
либо 1, либо 0 на основе истинности логического оператора ИЛИ.
То, что происходит в операторе printf("%s", a||b);
, заключается в том, что значение1
(поскольку адреса сравниваемых строковых указателей отличны от нуля, таким образом, OR имеет значение true и возвращает 1
), и делается попытка получить доступ в качестве указателя на строку с нулевым символом в конце.Это неопределенное поведение, и, скорее всего, оно приведет к краху (если вам повезет).
Если вы хотите напечатать случайную строку из набора переменных в вашем коде, вы можете сделать следующее:
#include <stdlib.h>
#include <time.h>
// (in main())
srand((unsigned)time(NULL));
int r = rand()%3;
if(r == 0)
puts(a);
else if(r == 1)
puts(b);
else
puts(c);