der folgende code, den ich schrieb, soll eine datei öffnen, die als ein eingang gegeben wird, schreibe es und den gelesenen.c - seltsame fgets() verhalten
- fopen() funktioniert einwandfrei und ich habe Zugriff auf die Datei.
- fprintf() funktioniert auch wie erwartet.
aber betreffs fgets -Wenn Ich verwende den Befehl, wenn wie dargestellt die Bedingung wahr ist, und wenn i i nicht bekommen, dass die Eingabe [0] der ‚\ n‘ Charakter während des Eingang [1] ' h ', und die Schleife läuft ohne anzuhalten, da fgets() das erste Zeichen immer wieder liest.
auch, es scheint, wie fgets() nicht weiter und hat alle die Datei in Eingabe gelesen - ich kann Eingabe [3] und bekomme 'l' wie erwartet, obwohl fgets() bestellt, nur 2 zu lesen Zeichen.
int main(int argc, char *argv[])
{
FILE* read = NULL;
read = fopen(name, "a+");
char* input = "";
fprintf(read, "hello world\n");
fprintf(read, "hello world\n");
assert(ferror(read) == 0);
while(!feof(read))
{
if(fgets(input, 2, read)==NULL)
return 0;
printf("%c\n", input[1]);
}
return 0;
}
'char * Eingabe =" ";'. Das bedeutet, dass "input" auf ein String-Literal verweist. String-Literale können nicht geändert werden. Ihr Programm hat also ein nicht definiertes Verhalten. Sie müssen einen Speicherpuffer für 'input' reservieren. Außerdem müssen Sie nach dem 'fprintf' den Dateizeiger zurückspulen, wenn Sie das, was Sie gerade geschrieben haben, zurücklesen wollen. Und schließlich, siehe [Warum ist "während (! Feof (Datei))" immer falsch?] (Http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong). – kaylum