LINUX.ORG.RU

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

Исправление PPP328, (текущая версия) :

Фигню написали, ему нужно выравнивает справа, а не слева. Плюс у вас всё еще фигня с тем, что strlen даёт bytes а не characters.

ТС, тебе написали еще в той теме, что в общем случае задача не решается, хоть обмажься wchar. Композитные символы и суррогатные пары ты сам не проанализируешь, потому что это еще и от шрифта зависит

#include <stdio.h>
#include <string.h>

int main(void) {
    const char *s1 = "message󠅟󠅘󠄐󠅝󠅩󠄜󠄐󠅩󠅟󠅥󠄐󠅖󠅟󠅥󠅞󠅔󠄐󠅤󠅘󠅕󠄐󠅘󠅙󠅔󠅔󠅕󠅞󠄐󠅝󠅕󠅣󠅣󠅑󠅗󠅕󠄐󠅙󠅞󠄐󠅤󠅘󠅕󠄐󠅤󠅕󠅨󠅤󠄑";
    const char *s2 = "message";

    printf("%s: %d\n", s1, (int)strlen(s1));
    printf("%s: %d\n", s2, (int)strlen(s2));
    
    return 0;
}

На разных шрифтах, рендерах, движках и консолях будет по разному выглядеть. В хромаке у меня показывает графически одинаково (как и должно быть), online compier рендерит пробелы, консоль рендерит непечатные символы.

message: 199
message: 7

Исправление PPP328, :

Фигню написали, ему нужно выравнивает справа, а не слева. Плюс у вас всё еще фигня с тем, что strlen даёт bytes а не characters.

ТС, тебе написали еще в той теме, что в общем случае задача не решается, хоть обмажься wchar. Композитные символы и суррогатные пары ты сам не проанализируешь, потому что это еще и от шрифта зависит

Исходная версия PPP328, :

Фигню написали, ему нужно выравнивает справа, а не слева. Плюс у вас всё еще фигня с тем, что strlen даёт bytes а не characters