Du müsstes erstmal erklären was du erreichen willst. Geht es nur um das einlesen und wieder ausgeben, würde das hier reichen:
Code:
int main() {
    char string[100];    /* Speicherplatz auf dem Stack für 100 Zeichen reserviert */
    printf("Schreib einen Satz: ");
    fflush(stdout);      /* damit der text sicher geschrieben wird */
    fgets(string, sizeof(string), stdin);  /* fgets() berüchsichtigt bereits das NUL am Ende */
    puts(string);        /* Keine aufwändige Format-Strings, dafür aber mit New-Line */
    return 0;
}
Willst du dynamisch speicher allozieren um z.B. eine Liste von Zeilen einzulesen, berücksichtige bitte, dass malloc() auch NULL zurückgeben kann, wenn kein Speicher mehr vorhanden ist:
Code:
int main() {
    char *string;    /* Speicherplatz auf dem Stack für einen Pointer auf String reserviert */
    string = (char*)calloc(100, sizeof(char));  /* Speicherplatz auf dem Heap für 100 Zeichen reserviert */
    if (string == NULL)
        return 1;    /* Fehler, kein Speicher mehr! */
    ....
    free(string);    /* Speicherplatz wieder
}