lima-city: Webhosting, Domains und Cloud
1 Pluspunkt 0 Minuspunkte

Wie kann ich ein Programm mit Pipe aufrufen und das Input lesen?

C:\> ipconfig | main.exe

Die Variable argv ist bei so einem Aufruf nämlich leer.

#include <stdio.h>

int main(int argc, char **argv) {
	printf("%s", argv[1]);
	return 0;
}
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Wenn du ein C-Programm mit Pipe aufrufst, wird die Eingabe nicht über die Kommandozeilenargumente (argv) übergeben, sondern über die Standardeingabe (stdin).

#include <stdio.h>

int main() {
    char input[100];

    // Lese die Eingabe von stdin
    fgets(input, sizeof(input), stdin);

    // Gib die Eingabe aus
    printf("Eingabe: %s\n", input);

    return 0;
}

Wenn du den genauen Umfang des Eingabewerts nicht kennst und er potenziell sehr groß sein kann, kannst du dynamische Speicherallokation verwenden, um den Eingabepuffer anzupassen. Anstatt ein festes Array zu verwenden, kannst du die Funktion malloc verwenden, um Speicherplatz für den Eingabepuffer zur Laufzeit zuzuweisen.

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

#define INITIAL_BUFFER_SIZE 100

int main() {
    char *input = malloc(INITIAL_BUFFER_SIZE * sizeof(char));
    if (input == NULL) {
        fprintf(stderr, "Fehler bei der Speicherallokation.\n");
        return 1;
    }

    size_t buffer_size = INITIAL_BUFFER_SIZE;
    size_t input_length = 0;
    int c;

    // Lese Zeichen von stdin, bis EOF erreicht ist
    while ((c = getchar()) != EOF) {
        input[input_length++] = (char)c;

        // Überprüfe, ob der Eingabepuffer voll ist, und erweitere ihn bei Bedarf
        if (input_length == buffer_size) {
            buffer_size *= 2;
            char *tmp = realloc(input, buffer_size * sizeof(char));
            if (tmp == NULL) {
                fprintf(stderr, "Fehler bei der Speicherallokation.\n");
                free(input);
                return 1;
            }
            input = tmp;
        }
    }

    // Füge das Null-Byte am Ende hinzu, um einen C-String zu bilden
    input[input_length] = '\0';

    // Gib die Eingabe aus
    printf("Eingabe: %s\n", input);

    // Gib den Speicher frei
    free(input);

    return 0;
}
von (629 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

266 Kommentare

14 Nutzer