выводит больше чисел чем нужно

При выводе программа запрашивает количество символов, но на русском программа выводит значительно больше символов. На английском же всё правильно.

#include <locale.h>
#include <stdio.h>

int main(void){
    setlocale(LC_ALL, "Rus");
    system("chcp 1251");
    char hello[] ="Hello world!";
    char hellor[] = "Привет мир!"; 
    printf("%s - %ld\n", hello, sizeof(hello));
    printf("%s - %ld\n", hellor, sizeof(hellor));
    return 0;
}

старался подключить библиотеку "locale" но что-то не вышло.


Ответы (1 шт):

Автор решения: Imas

Мои изменения в вашем коде:

  1. setlocale для установления локали на ru_RU.UTF-8 для корректного отображения русских символов
  2. wchar_t для строки на русском языке
  3. wcslen для подсчета количества символов в строке широких символов
  4. wprintf для вывода строки широких символов.
#include <locale.h>
#include <stdio.h>
#include <wchar.h>

int main(void) {
    setlocale(LC_ALL, "ru_RU.UTF-8");

    char hello[] = "Hello world!";
    wchar_t hellor[] = L"Привет мир!";

    printf("%s - %ld\n", hello, sizeof(hello) - 1); // -1 для учета нуль-терминатора
    wprintf(L"%ls - %ld\n", hellor, wcslen(hellor));

    return 0;
}

→ Ссылка