Problem mit fputs()
-
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char text[100]; char path[100]; FILE *f; system("clear"); printf("Bitte Pfad eingeben: "); fgets(path,sizeof(path),stdin); f = fopen(path,"a"); printf("Text eingeben: "); fgets(text,sizeof(text),stdin); fputs(text,f); fclose(f); getchar(); return 0; }
Wenn ich als PATH zum Beispiel /Users/max/test.txt eingebe, wird keine txt-Datei, sondern (laut Mac) ein Dokument erstellt, was ich aber mit keinem Programm öffnen kann.
Wenn ich das Programm so schreibe :
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char text[100]; FILE *f; system("clear"); f = fopen("/users/max/test.txt","a"); printf("Text eingeben: "); fgets(text,sizeof(text),stdin); fputs(text,f); fclose(f); getchar(); return 0; }
funktioniert das erstellen und öffnen der txt-Datei einwandfrei.
Was ist der Fehler beim ersten Programm ?
PS: Ich programmiere unter MAC OS X mit XCode
-
Du hast vermutlich im ersten Fall das Zeilenende-Zeichen am Ende des Strings. Ich denke, das solltest Du vor fopen entfernen.
-
Belli schrieb:
Du hast vermutlich im ersten Fall das Zeilenende-Zeichen am Ende des Strings. Ich denke, das solltest Du vor fopen entfernen.
Danke, aber wie ?
-
text[strlen(text)-2] = 0x00;
-
bdrummer schrieb:
text[strlen(text)-2] = 0x00;
Knallt wenn's ein "etwas kleinerer" String ist (Index kann negativ werden).
Sichere Version:
char *p; if ((p = strchr( text, '\n')) != NULL) *p = 0;
-
Scheppertreiber schrieb:
bdrummer schrieb:
text[strlen(text)-2] = 0x00;
Knallt wenn's ein "etwas kleinerer" String ist (Index kann negativ werden).
Sichere Version:
char *p; if ((p = strchr( text, '\n')) != NULL) *p = 0;
der string von fgets is ja ned "etwas kleinerer" der hat immer \r\n drinne
-
Mag sein ...
Wenn man in einem Forum Tips bekommt besteht immer das Risiko, das auch mal
woanders einzusetzen ... er hat halt nicht immer was im String. *grins*.Sinnvoll ist, sich irgendwo eine trim() Funktion zu bauen die hinten alles
weghaut was < BLANK ist. Braucht man ständig.