Здесь все идет, это обрабатывает все случаи, включая более длинный текст, чем вписывается в дополняемый диапазон:
char* padCentered(char* out, const char* str, const int len, const char padchar)
{
size_t lenstr = strlen(str);
const char* in = str;
if (lenstr < len) {
memset(out, padchar, len);
} else if (lenstr > len) {
in = (str + (lenstr/2)) - (len/2);
lenstr = len;
}
strncpy(out + ((len/2) - (lenstr/2)), in, lenstr);
out[len] = '\0';
return out;
}
void dopaddedstr()
{
char buf[1024];
printf("%s\n", padCentered(buf, "0123456789", 6, '-'));
printf("%s\n", padCentered(buf, "0123456789", 7, '-'));
printf("%s\n", padCentered(buf, "0123456789", 8, '-'));
printf("%s\n", padCentered(buf, "0123456789", 10, '-'));
printf("%s\n", padCentered(buf, "0123456789", 11, '-'));
printf("%s\n", padCentered(buf, "0123456789", 12, '-'));
printf("%s\n", padCentered(buf, "0123456789", 80, '-'));
}
выходные данные:
234567
2345678
12345678
0123456789
0123456789-
-0123456789-
-----------------------------------0123456789-----------------------------------