История изменений
Исправление MOPKOBKA, (текущая версия) :
но только вы литералы выводите, уже заранее зашитые строки
А какая разница между обычными строками? Наверное ты хотел const char * выводить? Можешь их сконвертировать в wchar_t, или через GNU libunistring вычислить размер строки без конвертации вот так:
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <unistr.h>
void right_pad(const char *text, int pad_size)
{
int mblen = u8_mbsnlen((const uint8_t*)text, strlen(text));
printf("%*s%s |\n", pad_size - mblen, "", text);
}
int main()
{
setlocale(LC_ALL, ".UTF8");
right_pad("Привет мир!", 30);
right_pad("Hello World!", 30);
right_pad("Довольно длинная строка ...", 30);
return 0;
}
Исправление MOPKOBKA, :
но только вы литералы выводите, уже заранее зашитые строки
А какая разница между обычными строками? Наверное ты хотел const char * выводить? Можешь их сконвертировать в wchar_t, или через GNU libunistring вычислить размер строки без конвертации вот так:
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <unistr.h>
void right_pad(const char *text, int pad_size)
{
int mblen = u8_mbsnlen((const uint8_t*)text, strlen(text));
printf("%*s%s |\n", pad_size - mblen, "", text);
}
int main()
{
#ifdef _WIN32
setlocale(LC_ALL, ".UTF8");
#else
setlocale(LC_ALL, "");
#endif
right_pad("Привет мир!", 30);
right_pad("Hello World!", 30);
right_pad("Довольно длинная строка ...", 30);
return 0;
}
Исправление MOPKOBKA, :
но только вы литералы выводите, уже заранее зашитые строки
А какая разница между обычными строками? Наверное ты хотел const char * выводить? Можешь их сконвертировать в wchar_t, или через GNU libunistring вычислить размер строки без конвертации вот так:
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <unistr.h>
void right_pad(const char *text, int pad_size)
{
int mblen = u8_mbsnlen((const uint8_t*)text, strlen(text));
printf("%*s%s |\n", pad_size - mblen, "", text);
}
int main()
{
#ifdef _WIN32
SetConsoleOutputCP(CP_UTF8);
#else
setlocale(LC_ALL, "");
#endif
right_pad("Привет мир!", 30);
right_pad("Hello World!", 30);
right_pad("Довольно длинная строка ...", 30);
return 0;
}
Исходная версия MOPKOBKA, :
но только вы литералы выводите, уже заранее зашитые строки
А какая разница между обычными строками? Наверное ты хотел const char * выводить? Можешь их сконвертировать в wchar_t, или через GNU libunistring вычислить размер строки без конвертации вот так:
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <unistr.h>
void right_pad(const char *text, int pad_size)
{
int mblen = u8_mbsnlen((const uint8_t*)text, strlen(text));
printf("%*s%s |\n", pad_size - mblen, "", text);
}
int main()
{
setlocale(LC_ALL, "");
right_pad("Привет мир!", 30);
right_pad("Hello World!", 30);
right_pad("Довольно длинная строка ...", 30);
return 0;
}