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.


Anmelden zum Antworten