元記事のmain()の
// ユーザーから最大入力文字数と切り出し文字数を受け取る
printf("最大入力文字数を指定してください: ");
scanf("%zu", &max_len);

char* input = (char*)malloc(max_len + 1);

printf("文字列を入力してください(最大 %zu 文字):\n", max_len);
fgets(input, max_len + 1, stdin);
見て勝手な想定押し付けんなボケと思ってる人はQiitaで1文字1バイトの想定は間違ってるぞとコメントしてやれば良いんじゃないですかね。