-
Guten Morgen an alle
ich muss euch mal belässtigen
ich bin einfach nicht für's Programmieren geschaffen deshalb brauch ich eure Hilfe.
Die Aufgabe ist es das die Software eine Logdatei einliesst, den Unix Timestamp in ein Datum und eine Uhrzeit umwandelt und das Datum in eine neue Datei schreibt. Soweit klappt es auch nur er anstelle des Datums in der neuen textdatei anstelle des Datums eine (NULL) einträgt. Ich habe 100mal geschaut aber ich finde den Fehler einfach nicht ich bin hier richtig am verzweifeln.
Ich habe folgenden Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> int main() { int unixModus = 0; int lnr = 0,mtime=0; int ijahr=0,imonat=0,itag=0,istd=0,imin=0,isek=0; //Auswahl printf("Bitte waehlen:\n\n<1> Datum --> Unix\n\n<2> Unix --> Datum\n\n<3> Log auslesen\n\n"); scanf("%d",&unixModus); switch(unixModus) { case 1: //Abfrage des Datums und der Uhrzeit printf("\n\n\nBitte geben Sie das Datum [dd.mm.yyyy] ein:::\n"); scanf("%d.%d.%d",&itag,&imonat,&ijahr); printf("Bitte geben Sie die Uhrzeit [hh:mm:ss] ein:::\n"); scanf("%d:%d:%d",&istd,&imin,&isek); printf("\n\n\nBitte waehlen: <1> UTC/GMT || <2> LocalTime:::\n"); scanf("%d",&mtime); //Ausgabe der Unixzeit ---> Aufruf der Funktion date2Unix() if (mtime==2) printf("UniXZeit::: %d [LocalTimezone]\n\n",date2Unix(ijahr,imonat ,itag,istd,imin,isek,mtime)); else if(mtime==1) printf("UniXZeit::: %d [UTC/GMT]\n\n",date2Unix(ijahr,imonat ,itag,istd,imin,isek,mtime)); else errorSend(); break; case 2: //Abfrage des Timestamps printf("\n\n\nBitte geben Sie den Unix Timestamp ein:::\n"); scanf("%d",&lnr); printf("\n\n\nBitte waehlen: <1> UTC/GMT || <2> LocalTime:::\n"); scanf("%d",&mtime); //Ausgabe des Datums ---> Aufruf der Funktion Unix2Date() printf("\n\nUniXZeit::: %d\n\n--> Datum: %s\n\n\n",lnr,Unix2Date(lnr,mtime)); break; case 3: //Aufruf der Funktion zur Verarbeitung der .log-Dateien logConvert(); break; default: //Default-Ausgabe wenn die Auswahl falsch war printf("\n:::::::::::::::::::::::::::::::::::::::::::::\n"); printf("\n\n\nFalsche Eingabe ::: Bitte Neustarten!\n\n"); } system("PAUSE"); return 0; } //---------------UNIX2DATE-------------------- int Unix2Date(int unixzeit,int modusTime) { //Variabeln für die einzelnen Datumsteile int ijahr=0,imonat=0,itag=0,istd=0,imin=0,isek=0; char timezone[30]; char stringVar[20]; int sommerZeit=0; //Endwert der UnixZeit 19.01.2038 um 4:14:07 int unixMax = 2147483647; //Überprüfung,ob die eingegebene Unixzeit gültig ist if (unixzeit>>unixMax) { errorSend(); } //time_t ist ein Zeitstempel ... in Sek ab 1970 //wie UnixZeit time_t unixStamp = unixzeit; //Struktur für time_t struct tm * unixConvert; //String zum Speichern des Datums char cbuffer[80]; //Struktur bekommt den Zeitstempel if(modusTime==2) unixConvert = localtime(&unixStamp); else if (modusTime==1) unixConvert = gmtime(&unixStamp); //Speichern der einzelnen Datumsteile in Variabeln strftime( stringVar, 20, "%d", unixConvert ); //Tag itag = atoi(stringVar); strftime( stringVar, 20, "%m", unixConvert ); //Monat imonat = atoi(stringVar); strftime( stringVar, 20, "%Y", unixConvert ); //Jahr ijahr = atoi(stringVar); strftime( stringVar, 20, "%H", unixConvert ); //Stunde istd = atoi(stringVar); strftime( stringVar, 20, "%M", unixConvert ); //Minute imin = atoi(stringVar); strftime( stringVar, 20, "%S", unixConvert ); //Sekunde isek = atoi(stringVar); //Zeitzone strftime( timezone, 30, "%z", unixConvert ); //Ausgabestring char str1[50]; //Zwischenspeicher char buffer[20]; //Umwandlung und Zusammenfassung in einen Return-String strcpy (str1,itoa(itag,buffer,10)); strcat (str1,"."); strcat (str1,itoa(imonat,buffer,10)); strcat (str1,"."); strcat (str1,itoa(ijahr,buffer,10)); strcat (str1," um "); strcat (str1,itoa((istd),buffer,10)); strcat (str1,":"); strcat (str1,itoa(imin,buffer,10)); strcat (str1,":"); strcat (str1,itoa(isek,buffer,10)); if (modusTime==2) { strcat (str1," "); strcat (str1,timezone); } else { strcat (str1," "); strcat (str1,"UTC/GMT"); } //Rückgabe des Datums printf (str1); return 0; } //--------------------LOGCONVERT-------------------- int logConvert() { //Zwischenspeicher fürs Einlesen char puffer[256]; int line= sizeof(puffer); //Trennzeichen char del[]="\n"; //Zählvariabeln int i =0; //Festlegen des Pfades für die Input-Datei FILE *fileOutput; fileOutput = fopen( "squidNeu.log", "w"); //Überprüfung, ob Datei vorhanden ist if(NULL == fileOutput) { fprintf(stderr, "Fehler beim Oeffnen ...\n"); return EXIT_FAILURE; } //Festlegen des Pfades für die Output-Datei FILE *fileInput; fileInput = fopen( "squid123.log", "r"); //Überprüfung, ob Datei vorhanden ist if(NULL == fileInput) { fprintf(stderr, "Fehler beim Oeffnen ...\n"); return EXIT_FAILURE; } //Ergebnisvariable int unixzeit2[1000]; //Zählvariable int counter=0; //Pointer für die Stringteilung char *wordptr; //solange Zeilen vorhanden sind wird eingelesen while(fgets (puffer, line, fileInput)) { //erste Zeile wird eingelesen wordptr = strtok(puffer,del); //Überprüfung, ob man am Ende des Strings ist while(wordptr == NULL); { //printf("WORDPTR: %s\n",wordptr); sscanf(wordptr, "%d",&unixzeit2[counter]); //printf("UNIX: %d\n",unixzeit2[counter]); counter++; //Sprung zum nächsten Satzteil //Stelle durch NULL markiert wordptr = strtok(NULL,del); } } int a=0; //Ausgabe des ErgebnisArrays in die Output-Datei for(;a<counter;a++) { //printf("Unix: %d --> Datum: %s\n",unixzeit2[a],Unix2Date(unixzeit2[a])); fprintf(fileOutput,"Unix: %d --> Datum: %s \n",unixzeit2[a],Unix2Date(unixzeit2[a],2)); } //Schließen der Dateien fclose(fileInput); fclose(fileOutput); } int date2Unix(int ijahr,int imonat ,int itag,int istd,int imin,int isek,int modusTime) { //Zeitzone [GMT+1] int timeZoneBonus = 1; int sommerZeit=0; //Ergebnisdatei int unixzeit3; int y=0; //Array zum speichern der Eingaben char datum[11]; char uhrzeit[9]; int convert [10]; //Zeiger für die "Zerlegung" des Datum-/Uhrzeit-Strings char *dateptr; char *dateptr2; //Tage im Jahr bei Monatsanfang // ohne Schaltjahr int daysUntilMonth[12] = {0,31,59,90,120,151,181,212,243,273,304,334}; //Wie viele Tage hat der Monat //ohne Schaltjahr int monthEnd[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //Ende Februar 28 oder 29 if (ijahr %4 == 0 && (ijahr %100 != 0 || ijahr %400 ==0)) { //Addition des Schalttages monthEnd[2] = monthEnd[2] + 1; } //Überprüfung der Eingabe, ob Datum gültig if(ijahr>=1970 && ijahr<=2038) { if (imonat>=1 && imonat<=12) { if(itag >=1 && itag <= monthEnd[imonat]) { if(istd>=0 && istd<=23) { if(imin>=0 && imin<=59) { if(isek>=0 && isek<=59) { //Startjahr der Unixzeit int curJahr=1970; int schaltTage = 0; //Schleife die für jedes Schltjahr einen "Schalttag" hinzu rechnet //von 1970 bis zum angegebenen for(;curJahr<=ijahr-1;curJahr++) { //Jahr ist ein Schaltjahr, wenn // Jahreszahl durch 4 teilbar ist und entweder nicht durch 100 teilbar ist // oder durch 400 if(curJahr%4== 0 && (curJahr%100!=0 || curJahr%400==0)) { schaltTage=schaltTage + 1; } } //Abfangen der Sommerzeit if (imonat>=3 && itag>=27 && istd >=2 && imonat <=10 && itag<=30 && istd<=3) sommerZeit = 1; else sommerZeit = 0; //Jahre seit Unix if ( (imonat>2) && (ijahr%4==0 && (ijahr%100!=0 || ijahr%400==0)) ) { unixzeit3 = unixzeit3 + 3600*24; } ijahr= ijahr-1970; //berechnung der Unixzeit if (modusTime==1) { unixzeit3=isek + 60*imin + 3600*(istd ) +(daysUntilMonth[imonat-1]+itag-1)*3600*24 +(ijahr*365+schaltTage)*3600*24; } else if (modusTime==2) { unixzeit3=isek + 60*imin + 3600*(istd- sommerZeit - timeZoneBonus) +(daysUntilMonth[imonat-1]+itag-1)*3600*24 +(ijahr*365+schaltTage)*3600*24; } //Ausgabe } else errorSend(); } else errorSend(); //Fehlerausgabe bei falschem Datum } else errorSend(); //oder Uhrzeit } else errorSend(); } else errorSend(); } else errorSend(); //Berechnete Unixzeit gültig****? if(unixzeit3<=2147483647 && unixzeit3>=0) { return unixzeit3; //Rückgabe der Unixzeit } else errorSend(); //sonst Fehler } //Fehlermeldung int errorSend() { printf("\n:::::::::::::::::::::::::::::::::::::::::::::\n"); printf("\n\n\nFalsche Eingabe ::: Bitte Neustarten!\n\n"); printf("Unix Timestamp began am 01.01.1970 um 00:00:00 [UTC/GMT]\n\n\n"); printf(" und endet am 19.01.2038 um 03:14:07 [UTC/GMT]\n\n\n"); system("Pause"); }
also der Teil den ich meine beginnt ab "//--------------------LOGCONVERT--------------------" Zeile 204
Die neue Text datei die er ausgibt sieht dann so aus
Unix: 1310139853 --> Datum: (null)
Unix: 1310139853 --> Datum: (null)
Unix: 1310139853 --> Datum: (null)
Unix: 1310139853 --> Datum: (null)
Unix: 1310139853 --> Datum: (null)
Unix: 1310139853 --> Datum: (null)
Unix: 1310139853 --> Datum: (null)
Unix: 1310139855 --> Datum: (null)
ich hoffe ihr könnt mir helfen.
Grüße PaperGeändert von Paper (16.11.11 um 10:54 Uhr)
-
16.11.11 11:27 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
die Funktion Unix2Date hat folgenden Prototyp:Code c:1
fprintf(fileOutput,"Unix: %d --> Datum: %s \n", unixzeit2[a], Unix2Date(unixzeit2[a],2));
sie gibt also einen int zurück...Code c:1
int Unix2Date(int, int)
In Funktion Unix2Date, Zeile 88:
Hä?Code c:1 2
printf (str1); // schreibt das Datum auf die Kommandozeile return 0; // gibt immer 0 zurück

Sorry, aber hast du wirklich erwartet, das das funktioniert?
Gruß
\edit: WTF?
Du extrahierst also aus dem Datum den Tag als String, konvertierst ihn in einen int, um ihn dann wieder in einen String zu konvertieren... und das für alle Datumswerte um sie in einen Gesamtstring zu schreiben? Dir ist schon klar, das du einfach nur die strftime Funktion dafür benutzen mußt?Geändert von deepthroat (16.11.11 um 11:33 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Den Code habe ich so übernommen, ich soll damit weiterarbeiten und halt den LogConvert machen.
Den jenigen der das alles geschrieben hat, den seh ich nie mehr wieder weil der nur kurz hier war. Jetzt wo er weg ist soll ich das mit seinem Code machen. Verstehen tu ich manche sachen auch nicht aber wenn ich's verändere läuft garnichtsmehr
. Ich versuchs hier so gut wie es geht
. Meine ganzen versuche da i.was zu ändern sind gescheitert weil es dann garnichtmehr funktioniert hat
.
Da weiß ich nicht was genau falsch ist. Ich habe daran gedacht dieses str1 zu ändern aber dann stürzt das Programm ab.
Ist das hier jetzt falsch oder einfach nur umständlich geschrieben?
Das was ich daran erfolgreich geändert habe ist einfach nur das hier
Code c:1 2 3
//Festlegen des Pfades für die Output-Datei FILE *fileInput; fileInput = fopen( "squid123.log", "r");
weil da vorher auch ein w stand. Aber Ok das zu verändern ist kein akt
aah ich bin blöd xD das kommt davon wenn man noch keinen Cafee getrunken hat xD
hier bei dem Teil
printf (str1); // schreibt das Datum auf die Kommandozeile
return 0; // gibt immer 0 zurück
einfach bei return auch dieses str1 rein kloppen dann gehts
aber hättest du mich nicht drauf aufmerksam gemacht wäre es mir nicht aufgefallen vielen dank
Geändert von sheel (16.11.11 um 15:53 Uhr) Grund: Triplepost
-
16.11.11 12:21 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ist aber noch lange nicht richtig.
Du solltest unbedingt die Warnungen deines Compilers einschalten.
1. die Funktion hat Rückgabetyp int, du gibst einen char* zurück
2. du gibst einen Zeiger auf lokalen Speicher zurück, das führt zu Abstürzen
3. du benutzt Funktionen die (noch) gar nicht deklariert sind, Funktionen sollten / müssen zuerst deklariert werden
Übrigens kann man seine Beiträge auch bearbeiten, es Doppel oder Tripelposts verstoßen gegen die Netiquette...
umständlich ist gar kein Ausdruck...Ist das hier jetzt falsch oder einfach nur umständlich geschrieben?
Das Problem kann ich nicht nachvollziehen. Kopiere die Ausgabe hier in Code-Tags.dann kommen wir zum 2. Problem in der kommandozeile steht einfach alles nebeneinander
ich schaff es nicht das auch untereinaner zu schreiben. I,wie klappt das nicht
Bitte achte auf die Groß/Kleinschreibung usw. Siehe Netiquette. Danke.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Entschuldigung das mit den Doppelpostings etc. passiert nichtmehr

Da ist wohl einfach die Vorfreude mit mir durch gegangen.
Also so sieht es in der Kommandozeile aus...
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:13 Mitteleu ropõische Sommerzeit8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit8.7.2011 u m 17:44:13 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit 8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15 Mitteleu ropõische Sommerzeit8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit8.7.2011 u m 17:44:15 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit 8.7.2011 um 17:44:15 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:16 Mitteleu ropõische Sommerzeit4.1.2002 um 0:36:50 Mitteleuropõische Zeit8.7.2011 um 17:44 :16 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:16 Mitteleuropõische Sommerz eit8.7.2011 um 17:44:16 Mitteleuropõische Sommerzeit29.1.2002 um 15:44:25 Mitt eleuropõische Zeit8.7.2011 um 17:44:16 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:35 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:35 Mitteleuropõische So mmerzeit8.7.2011 um 17:44:35 Mitteleuropõische Sommerzeit8.8.2005 um 1:18:32 M itteleuropõische Sommerzeit8.7.2011 um 17:44:35 Mitteleuropõische Sommerzeit8.7 .2011 um 17:44:35 Mitteleuropõische Sommerzeit8.7.2011 um 17:44:35 Mitteleurop õische Sommerzeit8.7.2011 um 17:44:35 Mitteleuropõische Sommerzeit8.7.2011 um 1 7:44:35 Mitteleuropõische Sommerzeit30.9.1970 um 14:24:46 Mitteleuropõische So mmerzeit
und ich würde es gerne untereinander haben.
8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit
8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit
8.7.2011 um 17:44:13 Mitteleuropõische Sommerzeit .... so meine ich das
Zu 1. Also ist das die böse Variante?
Zu 2. Hmm ich habe geschaut aber finde keine möglichkeit das anders zu lösen
Zu 3. Ich dachte die sind schon deklariert
Geändert von Paper (16.11.11 um 12:46 Uhr)
-
16.11.11 12:46 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Für welche Eingabe? "Log auslesen"? Ich sehe nicht wo da eine Ausgabe auf der Kommandozeile gemacht wird - welche Zeile?
Es ist falsch und funktioniert nur falls ein int mind. so groß ist wie ein char Zeiger.
Das return str1 in der Funktion Unix2Date.
Du benutzt in main Zeile 53 z.B. die Funktion Unix2Date welche allerdings erst in Zeile 93 definiert (und somit auch erst deklariert) wird. Funktionen müssen vor ihrer ersten Benutzung deklariert werden (ansonsten kann das zu schwer identifizierbaren Fehlern führen).Geändert von deepthroat (16.11.11 um 12:48 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Also der Teil
Code c:1 2
printf (str1); return (str1);
das printf (str1); ist es was unformatiert ist
in der Kommandozeile.
Hatte es testweise mal auskommentiert um zu schauen ob es das ist was angezeigt wurde.
Ja
ich habe meinen Eintrag bearbeitet aber leider zuspät :/
Ich habe geschaut aber keine Ahnung wie man das Problem lösen kann.
Das ist Falsch? Hmm weil es läuft ja einwandfrei, es tut was es tun muss.
Da gibt mein Compiler auch garkeine Fehler /Warnung aus.Geändert von Paper (16.11.11 um 13:02 Uhr)
-
16.11.11 13:04 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Über welchen Code sprichst du? In deinem Code oben gibt es keine Ausgabe auf die Kommandozeile oder ich sehe es nicht. Also, welche Zeile?
Man könnte die Funktion z.B. so definieren:
Und wenn du deinen Code ordentlich einrücken würdest, wäre er auch leichter lesbar.Code c:1 2 3 4 5 6 7 8
const char* Unix2Date(int unixzeit,int modusTime) { static char str1[50]; ... return str1; }
Welchen Compiler verwendest du? Der GCC gibt für den Code aus Beitrag 1 folgendes aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
footunx.c: In Funktion »main«: footunx.c:37:9: Warnung: Implizite Deklaration der Funktion »date2Unix« [-Wimplicit-function-declaration] footunx.c:41:9: Warnung: Implizite Deklaration der Funktion »errorSend« [-Wimplicit-function-declaration] footunx.c:53:7: Warnung: Implizite Deklaration der Funktion »Unix2Date« [-Wimplicit-function-declaration] footunx.c:53:7: Warnung: Format »%s« erwartet Argumenttyp »char *«, aber Argument 3 hat Typ »int« [-Wformat] footunx.c:58:7: Warnung: Implizite Deklaration der Funktion »logConvert« [-Wimplicit-function-declaration] footunx.c: In Funktion »Unix2Date«: footunx.c:120:8: Warnung: Variable »cbuffer« wird nicht verwendet [-Wunused-variable] footunx.c:99:7: Warnung: Variable »sommerZeit« wird nicht verwendet [-Wunused-variable] footunx.c: In Funktion »logConvert«: footunx.c:291:7: Warnung: Format »%s« erwartet Argumenttyp »char *«, aber Argument 4 hat Typ »int« [-Wformat] footunx.c:220:7: Warnung: Variable »i« wird nicht verwendet [-Wunused-variable] footunx.c: In Funktion »date2Unix«: footunx.c:326:9: Warnung: Variable »dateptr2« wird nicht verwendet [-Wunused-variable] footunx.c:325:9: Warnung: Variable »dateptr« wird nicht verwendet [-Wunused-variable] footunx.c:322:7: Warnung: Variable »convert« wird nicht verwendet [-Wunused-variable] footunx.c:319:8: Warnung: Variable »uhrzeit« wird nicht verwendet [-Wunused-variable] footunx.c:318:8: Warnung: Variable »datum« wird nicht verwendet [-Wunused-variable] footunx.c:315:7: Warnung: Variable »y« wird nicht verwendet [-Wunused-variable] footunx.c: In Funktion »errorSend«: footunx.c:458:1: Warnung: Kontrollfluss erreicht Ende von Nicht-void-Funktion [-Wreturn-type] footunx.c: In Funktion »date2Unix«: footunx.c:445:1: Warnung: Kontrollfluss erreicht Ende von Nicht-void-Funktion [-Wreturn-type] footunx.c: In Funktion »logConvert«: footunx.c:300:1: Warnung: Kontrollfluss erreicht Ende von Nicht-void-Funktion [-Wreturn-type] footunx.c: In Funktion »date2Unix«: footunx.c:393:41: Warnung: »unixzeit3« könnte in dieser Funktion uninitialisiert verwendet werden [-Wuninitialized]
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Code c:
1 2
printf (str1); return (str1);
das printf (str1); ist es was unformatiert ist in der Kommandozeile.
Hatte es testweise mal auskommentiert um zu schauen ob es das ist was angezeigt wurde.
und anstelle des ... kommt der Code den ich schon habe rein für den Teil? oder muss
ich den auch umschreiben?
Ich benutze den Dev C++.
-
16.11.11 13:22 #10
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Die Verwendung von printf in dieser Form ist sowieso gefährlich (was wenn ein % im String ist?).
Ja.Code c:1
puts(str1);
Nicht unbedingt. Wäre aber eine gute Idee.
Dev C++ ist kein Compiler sondern eine "IDE". Du hast also auch den GCC. Dann schalte alle Warnungen an! (Tools -> Compiler Options -> Compiler :
[x] Add the following commands when calling compiler:
-Wall
)
GrußGeändert von deepthroat (16.11.11 um 13:30 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Achso ich hatte das so gelassen weil man in einem Timestamp ja eh kein % oder sonstiges findet.

Ich habe das jetzt mal so gemacht. Ich habe keine Ahnung was da genau rein muss, ich habe es so versucht aber das war wohl ein Fehler.
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
const char* Unix2Date(int unixzeit,int modusTime) { static char str1[50]; //Variabeln für die einzelnen Datumsteile int ijahr=0,imonat=0,itag=0,istd=0,imin=0,isek=0; char timezone[30]; char stringVar[20]; int sommerZeit=0; //Endwert der UnixZeit 19.01.2038 um 4:14:07 int unixMax = 2147483647; //Überprüfung,ob die eingegebene Unixzeit gültig ist if (unixzeit>>unixMax) { errorSend(); } //time_t ist ein Zeitstempel ... in Sek ab 1970 //wie UnixZeit time_t unixStamp = unixzeit; //Struktur für time_t struct tm * unixConvert; //String zum Speichern des Datums char cbuffer[80]; //Struktur bekommt den Zeitstempel if(modusTime==2) unixConvert = localtime(&unixStamp); else if (modusTime==1) unixConvert = gmtime(&unixStamp); //Speichern der einzelnen Datumsteile in Variabeln strftime( stringVar, 20, "%d", unixConvert ); //Tag itag = atoi(stringVar); strftime( stringVar, 20, "%m", unixConvert ); //Monat imonat = atoi(stringVar); strftime( stringVar, 20, "%Y", unixConvert ); //Jahr ijahr = atoi(stringVar); strftime( stringVar, 20, "%H", unixConvert ); //Stunde istd = atoi(stringVar); strftime( stringVar, 20, "%M", unixConvert ); //Minute imin = atoi(stringVar); strftime( stringVar, 20, "%S", unixConvert ); //Sekunde isek = atoi(stringVar); //Zeitzone strftime( timezone, 30, "%z", unixConvert ); //Ausgabestring char str1[50]; //Zwischenspeicher char buffer[20]; //Umwandlung und Zusammenfassung in einen Return-String strcpy (str1,itoa(itag,buffer,10)); strcat (str1,"."); strcat (str1,itoa(imonat,buffer,10)); strcat (str1,"."); strcat (str1,itoa(ijahr,buffer,10)); strcat (str1," um "); strcat (str1,itoa((istd),buffer,10)); strcat (str1,":"); strcat (str1,itoa(imin,buffer,10)); strcat (str1,":"); strcat (str1,itoa(isek,buffer,10)); if (modusTime==2) { strcat (str1," "); strcat (str1,timezone); } else { strcat (str1," "); strcat (str1,"UTC/GMT"); } puts(str1); return str1; }
Den Code den ich schon hatte, für diesen Teil
Code c:1 2 3 4 5
int Unix2Date(int unixzeit,int modusTime) .... .... .... return str1;
-
16.11.11 13:47 #12
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ja gut stimmt ich bin nur von dem Linux Timestamp ausgegangen
weil das Programm nur dafür gebraucht wird.
Jaaa Fehlermeldungen und zwar folgende
genau so werden die mir angezeigt unten bei Dev C++
193 conflicting types for 'Unix2Date'
54 previous implicit declaration of 'Unix2Date' was here
In function `Unix2Date':
252 redeclaration of 'str1' with no linkage
194 previous declaration of 'str1' was here
281 [Warning] function returns address of local variable
-
16.11.11 14:09 #14
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hmm okay =/ jetzt nurnoch schauen wie ich das anstelle
aach ich Holzkopf-.- jaaa sry
Mal eine andere frage
den Pfad zur Datei die eingelesen wird habe ich momentan so angegeben
Code c:1 2 3
//Festlegen des Pfades für die Input-Datei FILE *fileInput; fileInput = fopen( "squidN123.log", "r");
das geht aber nur wenn die Datei sich im gleichen Ordner befindet wie das Programm.
Geht das irgendwie das die Software drauf zugreift auch wenn die 2 Dateien in unterschiedlichen Verzeichnissen liegen?
Geändert von sheel (16.11.11 um 15:55 Uhr) Grund: Doppel
Ähnliche Themen
-
Beim Programm Start Passwort Feld BITTE HILFE
Von Roma3 im Forum Visual Basic 6.0Antworten: 7Letzter Beitrag: 14.05.08, 16:54 -
Pls Brauche Schnelle Hilfe Beim Restart Beenden und Ausschaltungs programm
Von Roma3 im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 10.03.08, 22:07 -
Bitte hilfe bei meinem Screen Shot Programm PLS schnelle hilfe
Von Roma3 im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 12.02.08, 19:26 -
Hilfe: brauche hilfe beim Prüfen von Dateien ob sie Ordner sind
Von XBert im Forum C/C++Antworten: 0Letzter Beitrag: 07.08.07, 18:12 -
HILFE Ich brauche ein wenig hilfe beim erstellen eines pobligen nickpage script
Von Buffy-Fan im Forum PHPAntworten: 8Letzter Beitrag: 14.06.04, 10:37



11Danke

Zitieren

Login






