- 
	
	
	
	
		jetzt frag ich mal ganz blöd was machst sprintf()?
edit:
ich würd sowas machen ;) aber ich weiß ja net genau was du machen willst :)
	Code:
	
#define MAX 12
typedef enum { eJan = 1, eFeb, eMar, eApr, eMai, eJun, eJul, eAug, eSep, eOkt, eNov, eDez} month_t
typdef struct{
   uint8_t hours;
   uint8_t minutes;
   uint8_t seconds;
   uint8_t day;
   month_t month;
   uint16_t year;
} dates_t
dates_t datesString[MAX]
void InitDateString(dates_t *buf) // 14:33:59 - 24.01.2007
{
   buf->hours = 14;
   buf->minutes = 33;
   buf->secondes = 59;
   buf->day = 24;
   buf->month = eJan;
   buf->year = 2007;
}
 ps: keine gewähr auf richtigkeit :D hab das grad so ausm ärmel geschüttelt
	 
 - 
	
	
	
	
		Nein das geht nicht.
datesString[] ist kein String, sondern ein Array von dates_t.
sprintf schreibt die Ausgabe nicht in ein FILE* wie fprintf oder stdout wie printf, sondern in einen String, bzw. es bekommt einen char*, also die Adresse des Anfangs.
	 
 - 
	
	
	
	
		Danke Sprinter, mit sprintf funktioniert es gut. es gibt nur eine ewig lange codezeile ;-)
eine andere Frage zu sprintf:
ich weis man muss irgendwo ein "0" einfügen wenn mann möchte, dass "01" ausgegeben wird anstelle von "1".
Wo muss ich das "0" einfügen? irgendwo um das "%" herum aber wo?
	 
 - 
	
	
	
	
		%5.2f = 00123.45
du brauchst wahrscheinlich %2d
	 
 - 
	
	
	
	
		Führende 0 mit %02d oder %2d. Wenn die Codezeile zu lange ist, kannst die auch umbrechen.
	Code:
	
sprintf (buf, "%d:%d:%d %d-%d-20%d %d %c%c" CR_LF,
                      hour, min, sec,                // Zeit
                      day, month, year,              // Datum 
                      t5, t5_string[0], t5_string[2] // Zeugs 
        );
 
	 
 - 
	
	
	
	
		musst du nicht beiner unterbrechung der zeile einen '\' backslash machen?
	Code:
	
sprintf (buf, "%d:%d:%d %d-%d-20%d %d %c%c" CR_LF, \
                      hour, min, sec, \               // Zeit
                      day, month, year, \             // Datum
                      t5, t5_string[0], t5_string[2] \ // Zeugs
        );
 
	 
 - 
	
	
	
	
		Nein. \ brauch der Präprozessor bei mehrzeiligen Makros.
Für den Compiler sind SPACE, TAB, NEWLINE, ... white space.
	 
 - 
	
	
	
	
		so ich hab das mal ausprobiert und was in meinem txt file steht ist folgendes:
15:70:79,25.15.20124, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
Wieso das Jahr falsch ist ist ein anderes Problem -> Kleinigkeit.
Aber wieso bekomme ich "?" ?
Mein Code:
	Code:
	
        sprintf(buf,"%2d:%2d:%2d,%2d.%2d.20%2d,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f%c%c",timeStamp.hour,timeStamp.min,timeStamp.sec,timeStamp.day,timeStamp.month,timeStamp.year,tempT5,tempT6,tempT8,tempT9,tempT10,tempT11,tempT12,tempT13,tempT15,tempT16,tempB,tempR,tempOut,tempSouth,tempWest,tempRunBackT40,0x0D,0x0A);
 alle Temperaturen sind double Werte die möchte ich auf Hundertstel genau abspeichern.
	 
 - 
	
	
	
	
		sprintf aud der avr-libc unterstützt nicht den vollen Funktionsumfang. %f würde float-Arithmetik und malloc und... nach sich ziehen.
Schau mal in die Doku zur avr-libc. bei WinAVR unter ./doc/...