Echo All Palindromes, en C

Me encantan las ideas presentadas en el libro de Brian Kernighan y Rob Pike, "El entorno de programación de UNIX", donde se centran en trabajar en un entorno en el que se pueden reunir muchos programas (pequeños, precisos y bien entendidos) en la línea de comandos. para realizar muchas tareas de programación.

Estoy repasando estrictas convenciones de ANSI C y tratando de mantener esta filosofía. En algún lugar de este libro (puedo obtener un número de página exacto si es necesario) sugieren que todos los programas en este entorno deben cumplir con los siguientes principios:

Si la entrada se presenta en la línea de comando, como un argumento para el propio programa, procese esa entrada.

Si no se presenta ninguna entrada en la línea de comando, procese la entrada desde stdin.

Aquí hay un programa en C que escribí que hará eco de cualquier entrada (numérica o alfabética) que sea un palíndromo. Mi pregunta específicamente:

¿Es este un programa de C bien comportado? En otras palabras, ¿esto es lo que sugirieron Kernighan y Pike es el comportamiento óptimo para una aplicación de línea de comando como esta?

#include <stdio.h>
#include <string.h> /* for strlen */

int main(int argc, char* argv[]) {

    char r_string[100];

    if (argc > 1) {

        int length = (int)strlen(argv[1]);

        int i = 0;
        int j = length;
        r_string[j] = (char)NULL;
        j--;
        for (i = 0; i < length; i++, j--) {
           r_string[j] = argv[1][i];
        }

        if (strcmp(argv[1], r_string) == 0) {
            printf("%s\n", argv[1]);
        }

    } else {

        char* i_string;

        while (scanf("%s", i_string) != EOF) {

            int length = (int)strlen(i_string);

            int i = 0;
            int j = length;
            r_string[j] = (char)NULL;
            j--;
            for (i = 0; i < length; i++, j--) {

               r_string[j] = i_string[i];
            }

            if (strcmp(i_string, r_string) == 0) {

                printf("%s\n", i_string); 
            }
        }
    }

    return 0;
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta