eine Frage zum Zeiger
-
Morgen, zusammen
Der Code sollte folgendes funktionieren.
1, Ein Zeiger (hier "zeiger") zeigt auf einen Datenstrom, der sich in einer Datei befindet.
2, Eine Variable(hier "m") enthält, wieviele Zahlen es gibt.
3, Zeiger um m zurückziehen, also wieder auf Anfang zeigen.
4, Daten ausgeben.
Aber der Code funktioniert nicht wie geplannt. Der gibt nur den ersten Wert aus.
Wer kann mir helfen?
Danke#include <stdio.h>
#include <stdlib.h>
int main()
{
char *zeiger;
unsigned char m = 0;
FILE *datei;
datei = fopen("Daten.txt","rt");
while ((fscanf(datei, "%d", zeiger)) != EOF)
{
zeiger++;
m++;
}
fclose(datei);zeiger = zeiger - m; //Zeiger zurückziehen
while ((*zeiger) != NULL)
{
printf("%d\t", *zeiger); //Daten ausgeben
zeiger++;
}
}
-
zeiger hat keinen Speicher!!
Du solltest mit malloc Speicher reservieren, da zeiger sonst ins nirvana zeigt! und ins nirvana daten schreiben kommt nicht gut
-
Meinst Du "zeiger = (char*) malloc (sizeof(char));"?
Ich habe eingesetzt, aber das hilft nicht.
Kannst Du mir den ganzen Code geben?
Danke
-
@logic: malloc(sizeof(char)) liefert dir Platz für ein char ... du benötigst aber wahrscheinlich mehr ... also muss es malloc(n * sizeof(char)) heissen wobei n die Anzahl darstellt.
-
Warum char statt int? Du liest mit %d schließlich ints aus.
Hast du mal dran gedacht ein Array zu verwenden?
Wieso brichst du beim Ausgeben bei 0 ab? Wieso schreibst du NULL statt 0?sizeof(char) ist übrigens immer 1 und sollte deshalb nie explizit ausgeschrieben werden.
Der Rückgabewert von malloc sollte laut Meinung einiger Experten auch nicht gecastet werden, auf jeden Fall ist es mindestens sinnlos.
-
Hi,
Ich habe das Programm umgeschrieben. Scheint besser zu sein. Das einzige Problem ist, ich kriege eine unendlose Schleife. Also das "\0" ist
auf jeden Fall nicht richtig, aber was ist das richtige? Was ist der Unterschied zw. NULL, EOF und "\0"?#include <stdio.h>
#include <stdlib.h>
int main()
{
int *zeiger;
unsigned char m = 0;
FILE *datei;
int zeichen
datei = fopen("Daten.txt","rt");
while ((fscanf(datei, "%d", &zeichen)) != EOF)
{
*(zeiger+m) = zeichen;
m++;
}
fclose(datei);m = 0;
while ((zeiger+m) != "\0")
{
printf("%d\t", *(zeiger+m));
m++;
}
}
-
zeiger hat immer noch keinen speicher
Hoer mal n bisschen Bashar.
NULL ist das selbe wie (void*)0 - und wird meistens dafuer verwendet zu sagen, dass dieser Zeiger 'ungueltig'.
EOF - End Of File, zeigt an, dass die Datei zueende ist.
"\0" ist ein string (char*) mit folgenden inhalt '\0' '\0' was du meinst ist wohl eher
'\0' welches den wert 0 hat und das Ende eines strings kennzeichnet!
-
könntest du bitte in Zukunft nicht bei EINEM Thread bleiben ?
Und vielleicht endlich deine Pointer mit NULL initialisieren ?
Dann würde nämlich deine Software (noch immer) nicht laufen...