Какой именно у вас вопрос? В любом случае, вы говорите, что пишете на C ++, но используете char *, printf и stdlib.h, поэтому вы действительно пишете на C, а base C не поддерживает Unicode. Помните, что char в C - это не «символ», это просто байт, а char * не массив символов, это массив байтов. Когда вы печатаете строку «\ u00A3» в вашей программе примера, вы не печатаете символ Unicode, вы фактически печатаете эти буквенные байты, и ваш терминал помогает вам и интерпретирует их как символ Unicode. Тот факт, что он правильно печатает символ £, просто совпадение. Вы можете убедиться в этом сами. Если вы напечатаете в своем примере программы stf [0], вы должны просто увидеть символ "\".
Если вы хотите правильно использовать юникод в C, вам нужно использовать библиотеку. Есть из чего выбирать, и я не использовал ни одного из них, чтобы рекомендовать один. Или вам нужно использовать C ++ 11 или новее и использовать std :: wstring и friends. Но то, что вы делаете, не является реальным юникодом и не будет работать так, как вы ожидаете в долгосрочной перспективе.