Использование UNICODE в С++ [закрыт]

203
27 февраля 2019, 09:20

Нужно в строке UNICODE написать все символы в обратном порядке. Очень маленький опыт работы с UNICODE по-этому не понимаю что нужно исправить

#include "stdafx.h"
#include <fcntl.h>
#include <io.h>
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include "stdafx.h"

int main()
{
    wchar_t string[] = L"\x0124\x0117\x0177 \x263A\n";
    int lenght = size_t wcslen (string);
    int temp, i, j;
    for (i = 0; j = lenght - 1; i < j; i++; j--)
    {
        temp = string[i];
        string[i] = string[j];
        string[j] = temp;
    }
    wprintf(string);
    system("pause");
    return 0;
}
Answer 1

Работа с UNICODE ничем не отличается от работы с ANSI символами. Отличия минимальны:

  1. Вместо char используется wchar_t (под Windows можно WCHAR),
  2. Вместо строк "..." используются UNICODE строки L"...",
  3. Используются UNICODE версии строковых функций, например, wcslen вместо strlen.

Это все, что нужно сделать, чтобы преобразовать программу для работы с юникодными строками.

Что касается конкретно вашей программы, то вы напрасно не обращаете внимания на то, что пишет вам компилятор. Синтаксические ошибки это самое простое, достаточно всего лишь прочитать сообщения компилятора. Например:

int lenght = size_t wcslen (string);

ошибка, size_t тут непонятно к чему. Если вы хотели преобразовать результат wcslen к типу lenght, то надо было написать так:

int lenght = (int)wcslen (string);

Дальше:

for (i = 0; j = lenght - 1; i < j; i++; j--)

Цикл for должен содержать три выражения, разделенных точками с запятой. У вас их пять. Вероятно, вы хотели написать так:

for (i = 0, j = lenght - 1; i < j; i++, j--)

Для вас запятая может мало отличаться от точки с запятой, но для компилятора это совершенно разные вещи. Он не пытается догадаться что вы имели в виду, просто отмечает это как ошибку.

Остальное вроде правильно.

READ ALSO
Подключение библиотек в Ubuntu

Подключение библиотек в Ubuntu

При компиляции кода выдает следующие ошибки:

167
double free or corruption (out): 0x00000000020f6e70 ***

double free or corruption (out): 0x00000000020f6e70 ***

Я абсолютно не могу понять , почему почти два идентичных кода, но в первом из них выдает ошибку double free or corruption (out): 0x00000000020f6e70 ***, а во втором нет...

187
цикл должен выполняться до 8, включительно, но выполняется лишь до 6

цикл должен выполняться до 8, включительно, но выполняется лишь до 6

цикл должен выполняться до 8, включительно, но выполняется лишь до 6Суть задачи не важна, так как она сделана, важен сам процесс автоматизации

155
Директивы препроцессора #ifdef #define и #undef

Директивы препроцессора #ifdef #define и #undef

В чем здесь проблема? Почему n всегда равно либо 100 и 100, либо 200 и 200, как ни крути

184