What [^] means depends on what follows it. If there are no more ]'s, it means you have an error in your conversion string. The format string "%[^]]]%d" matches a sequence of any characters except "]", then a "]", and then a number. If [^] were to be taken to mean a set of only caret, the interpretation of the string would change to match a sequence of carets, then two "]"s, and then a number. And you would have no way of expressing the original interpretation.
I honestly don't think there is a way to construct a set of only caret, but if there were, I'd say [^-^] was it, since the set "everything but - and ^" can be constructed with [^^-] instead.