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;
}