Strings mit undefinierter Länge in C lesen

zuerst (wie immer) möchte ich mich für mein Englisch entschuldigen, es ist vielleicht nicht klar genug.

Ich bin nicht so gut in C-Programmierung, und ich wurde gebeten, eine "Zeichenfolge" -Eingabe mit undefinierter Länge zu lesen.

Dies ist meine Lösung

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *newChar();
char *addChar(char *, char);
char *readLine(void);

int main() {
  char *palabra;
  palabra = newChar();

  palabra = readLine();
  printf("palabra=%s\n", palabra);

  return 0;
}

char *newChar() {
  char *list = (char *) malloc(0 * sizeof (char));
  *list = '\0';
  return list;
}

char *addChar(char *lst, char num) {
  int largo = strlen(lst) + 1;
  realloc(&lst, largo * sizeof (char));
  *(lst + (largo - 1)) = num;
  *(lst + largo) = '\0';
  return lst;
}

char *readLine() {
  char c;
  char *palabra = newChar();

  c = getchar();
  while (c != '\n') {
    if (c != '\n') {
      palabra = addChar(palabra, c);
    }
    c = getchar();
  }
  return palabra;
}

Bitte, ich würde mich freuen, wenn Sie mir helfen, indem Sie mir sagen, ob es eine gute Idee ist oder ob Sie mir eine andere Idee geben (und mir auch sagen, ob es eine "richtige" Verwendung für Zeiger ist).

Danke im Vorau

BEARBEITEN Nun, danke für deine Antworten, sie waren sehr nützlich. Jetzt poste ich bearbeiteten (und ich hoffe besser) Code, könnte vielleicht für jemanden nützlich sein, der neu in C ist (wie ich) und erneut eine Rückmeldung erhalten.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void reChar(char **, int *);
void readLine(char **, int *);

int main() {
    char *palabra = NULL;
    int largo = 0;

    reChar(&palabra, &largo);
    readLine(&palabra, &largo);
    printf("palabra=%s\n", palabra, largo);

    system("pause");
    return 0;
}

void reChar(char **lst, int *largo) {
    (*largo) += 4;
    char *temp = (char*) realloc(*lst, (*largo) * sizeof (char));

    if (temp != NULL) {
        *lst = temp;
    } else {
        free(*lst);
        puts("error (re)allocating memory");
        exit(1);
    }
}

void readLine(char **lst, int *largo) {
    int c;
    int pos = 0;

    c = getchar();
    while (c != '\n' && c != EOF) {
        if ((pos + 1) % 4 == 0) {
            reChar(lst, largo);
        }
        (*lst)[pos] =(char) c;
        pos++;
        c = getchar();
    }
    (*lst)[pos] = '\0';
}

PS:

s scheint genug zu sein, um langsam die Größe von "Palabra" zu erhöhen.

Ich bin nicht sicher, ob Capturegetchar() in einint und wirf es dann in einchar ist der richtige Weg zu hadleEOF Fallstricke

Antworten auf die Frage(10)

Ihre Antwort auf die Frage