Причина, по которой это не работает, заключается в том, что при сравнении сравниваются не строки, а символьные указатели.
Причина, по которой он может работать при использовании char *, заключается в том, что компилятор может решить один раз сохранить буквенную строку "opt" и повторно использовать ее для обеих ссылок (я уверен, что видел компилятор установка где-нибудь, что указывает, делает ли это компилятор).
В случае char opt [] компилятор копирует строковый литерал в область хранения, зарезервированную для массива opt (возможно, в стеке), что приводит к разным указателям.
Renze