CTime() macht zeilenumbruch



  • Hallo,

    ich habe ein kleines problem, und zwar macht die funktion immer einen zeilenumbruch nahc der ausgabe, das will ich verhinden, funzt aber nicht, meine funktion sieht so aus:

    int find_last_mod(char *datei) {
    	struct stat attribut;
    	char *string[250];
    	stat(datei, &attribut);
    	*string=ctime(&attribut.st_atime);
    	*string[strlen(*string)-1] = '\0';
    	printf("   %s", *string);
    	return 0;
    }
    

    uebergeben bekommt sie einen dateinamen und findet dort die zeit der letzten modifikation raus, funzt auch allet gut...
    Zeile 6 habe ich jetzt hinzugefuegt um das letzte zeichen des string von zeilenumbruch zu einer \0 umzuschreiben... klappt nur nicht, woran koennte das liegen?



  • Erste Frage: Wieso legst du dir da ein Array von 250 char-Pointern an?

    Zweitens: man: ctime kümmert sich selbst um den Speicher, in den es den Datumsstring einträgt - eventuell kannst du stattdessen ctime_r verwenden (oder den übergebenen Text in dein char-Array kopieren).

    PS: "klappt nicht" ist eine saumäßige Fehlermeldung 😉



  • CStoll schrieb:

    Erste Frage: Wieso legst du dir da ein Array von 250 char-Pointern an?

    Zweitens: man: ctime kümmert sich selbst um den Speicher, in den es den Datumsstring einträgt - eventuell kannst du stattdessen ctime_r verwenden (oder den übergebenen Text in dein char-Array kopieren).

    PS: "klappt nicht" ist eine saumäßige Fehlermeldung 😉

    ersmtal danke fuer die schnelle antwort, das 250er array war nur... naja, erst hat ichs ganz ohne ne variable und dann wollt ich halt irgendwie den zeilenumbruch rausbekommen und hab dann nen array eingebaut was ich grosszuegig dimensioniert habe... verkleinere das sicherlich noch... (auf 20 zeichen dacht ich mir)
    wie kann man das denn dann in nen char array kopieren?
    ctime_r <-- guck ich mir gleich ma an

    EDIT:
    ctime_r gibt es irgendwie nicht ... hab time.h eingebunden, is das irgendwo anders?

    EDIT2:
    Achja, sorry wegen dem "klappt nicht" es kommt halt immer dieser windows mist mit "Problembericht senden"...



  • Atair schrieb:

    ersmtal danke fuer die schnelle antwort, das 250er array war nur... naja, erst hat ichs ganz ohne ne variable und dann wollt ich halt irgendwie den zeilenumbruch rausbekommen und hab dann nen array eingebaut was ich grosszuegig dimensioniert habe... verkleinere das sicherlich noch... (auf 20 zeichen dacht ich mir)

    Das ist nicht nur überdimensioniert (damit hätte ich noch nichtmal ein Problem), sondern schlichtweg überflüssig - wenn du schon ein Array brauchst, dann ein char-Array (siehe unten).

    ctime_r gibt es irgendwie nicht ... hab time.h eingebunden, is das irgendwo anders?

    Ups, kann durchaus sein, daß die _r Versionen der <time.h> nur unter Linux exisitieren - in dem Fall bleibt wohl das kopieren:

    char str[50];// Achtung: kein char*
    strcpy(str,ctime(&time));
    str[strlen(str)-1]='\0';
    

    Edit: Und der "Problembericht" könnte daher kommen, daß du nicht in dem von ctime() gelieferten Bereich schreiben darfst.



  • ich danke sehr!
    schon wieder was gelernt


Log in to reply