mein C programm stellt eine Eingabemaske zur verfügung (endlos while)
und liest mittels fgets Dateneingaben ein.
ist der eingegebene wert kürzer als das array das in aufnehmen soll, ist alles ok.
wenn allerdings der eingegebene wert, die länge des bereitgestellten arrays übertrifft.
also zb. array[10] und ich aber 12 zeichen eingebe,
dann wird im ersten durchlauf 1-10 aufgenommen
und sobald die funktion wieder bei fgets angekommen ist 10-12 automatisch ausgeführt.
(siehe bild)
eingabe: "hallo" -> funktioniert. count 1 (ein wort)
eingabe: "halloIchBinEinLangerTest" -> count 1 (ein wort), 3 auswertungen (halloIchBi, nEinLanger, Test\n)
eingabe: "hallo IchBinEinLangerTest" -> count 2 (zwei wörter), und 3 auswertungen
Frage: wie kann ich das verhindern? also dass der gesamte eingegebene string eingelesen wird (auf mehrere etappen) denn ich finde nichts wo fgets sich das merkt?! wenn es länger ist als das array dann könnte es entweder mit einem error sofort gestoppt werden, oder zumindest auf die max länge abgeschnitten werden.
vielen dank für die Hilfe.
und liest mittels fgets Dateneingaben ein.
ist der eingegebene wert kürzer als das array das in aufnehmen soll, ist alles ok.
wenn allerdings der eingegebene wert, die länge des bereitgestellten arrays übertrifft.
also zb. array[10] und ich aber 12 zeichen eingebe,
dann wird im ersten durchlauf 1-10 aufgenommen
und sobald die funktion wieder bei fgets angekommen ist 10-12 automatisch ausgeführt.
(siehe bild)
eingabe: "hallo" -> funktioniert. count 1 (ein wort)
eingabe: "halloIchBinEinLangerTest" -> count 1 (ein wort), 3 auswertungen (halloIchBi, nEinLanger, Test\n)
eingabe: "hallo IchBinEinLangerTest" -> count 2 (zwei wörter), und 3 auswertungen
Frage: wie kann ich das verhindern? also dass der gesamte eingegebene string eingelesen wird (auf mehrere etappen) denn ich finde nichts wo fgets sich das merkt?! wenn es länger ist als das array dann könnte es entweder mit einem error sofort gestoppt werden, oder zumindest auf die max länge abgeschnitten werden.
vielen dank für die Hilfe.
C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( int argc, char* argv[] ) {
if (argc == 1) {
char str[10];
char *ptr;
int count;
char *array[5];
char delimiter[] = " ";
while(1){
memset(str, 0, sizeof(str));
count = 0;
printf("prompt>");
fgets(str, 10, stdin);
ptr = strtok(str, delimiter); // change sentence to words
while(ptr != NULL) {
array[count] = ptr;
ptr = strtok(NULL, delimiter);
count++;
}
if (count==1){
printf("count = 1\n");
}
else {
printf("count != 1\n");
}
}
}
return 0;
}
Anhänge
Zuletzt bearbeitet: