// 入力(+メモリ確保)関数を簡略化してみた
#define LINE_LENGTH (100)
int main(int argc, char *argv[])
{
unsigned char *p, *p1, *q;
int len_input;
unsigned char inputLine[LINE_LENGTH];
unsigned char kaibunStr[LINE_LENGTH * 2];

printf("任意の文字列を入力してください: ");
scanf("%99[^\n]", inputLine);
len_input = strlen(inputLine);
if (len_input == 0) return 0;
strcpy(kaibunStr, inputLine);
p = inputLine + len_input - 1;
q = kaibunStr + len_input;
p -= kanji1byte(*(p - 1)) ? 2 : 1;
while (p >= inputLine) {
p1 = p - 1;
if (p1 >= inputLine && kanji1byte(*p1)) {
*q++ = *p1;
*q++ = *p;
p--;
p--;
} else {
*q++ = *p--;
}
}
*q = '\0';
printf("入力した文字列を回文で表\示すると「%s」になります。\n", kaibunStr);
return 0;
}