LINUX.ORG.RU

История изменений

Исправление 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;
}