Hallo, ich übe C und ich habe ein kleines Problem mit dem folgenden Code. Zuallererst liest mein Programm einfach die Eingabe vom Benutzer und wenn es Speicher gibt, speichert es es, sonst macht es nichts.Verwenden eines Arrays mit Zeigern in C
Ich habe ein Array von Zeigern zu char namens "Linien" und ein Array von Zeichen für die temporäre Speicherung des Eingangs namens "line".
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXWIDTH 81
#define MAXLINES 100
int main()
{
char* lines [MAXLINES];
char line[MAXWIDTH];
int i ;
int n ;
Dann werde ich überprüfen, ob mein Array von Zeigern Raum hat und der Eingang ist nicht Null. Ich mache es in einer for-Schleife, um das Array zu füllen, und normalerweise sollte die for-Schleife aufhören, wenn ich nichts eintippe und einfach Enter drücke oder wenn das Array voll ist. Wenn Platz vorhanden ist, überprüfe ich, ob in dem Bereich, auf den der Zeiger zeigt, genügend Speicher vorhanden ist. Wenn das in Ordnung ist (! = NULL), kopiert das Programm die Eingabe von gets (line) in den Speicher.
for (n = 0; n < MAXLINES && gets(line) != NULL; n++)
{
if ((lines[n] = malloc(strlen(line) + 1)) == NULL)
exit (1);
strcpy(lines[n], line);
}
Der Rest des Codes ist nur für die Ausgabe und Freigabe des Speichers.
for (i = 0; i < n; i++)
{
puts(lines[n-i-1]);
free(lines[n-i-1]);
}
return 0;
}
Nun ist die problemis, dass das Programm läuft ohne Fehler, aber es funktioniert nicht, wie ich will. Es ist nur Durchführung einer Infinet-Schleife, wo ich eingeben kann, solange ich will, was ich will, ohne jede Reaktion.
Endlosschleife? Bedeutung Sie können mehr als 100 Zeilen hinzufügen? – EboMike
Ich habe nicht getestet, ob ich 100 Zeilen eingeben kann, aber ich habe versucht, die Schleife zu verlassen, indem ich Enter drücke. – Ordo
Was lässt dich denken "normalerweise sollte die for-Schleife aufhören, wenn ich nichts eintippe und einfach Enter drücke" ?? gets() gibt bei einem Fehler nur NULL zurück, es sei denn, Sie führen eine Datei in den Befehl ein. Das Terminal wird niemals EOF machen. – AlastairG