2017-09-30 6 views
0
Zuordnung Array

ich insgesamt Noob bin so könnte dies vollständig abgeschaltet werden, aber warumWas in struct richtige Methode ist

struct staff{ 
    int id; 
    char lastdate[8]; 
    char codeid[8]; 
}; 

in Haupt ich Daten aus Mysql nehmen und:

... 
while((row = mysql_fetch_row(confres))) 
{ 
    char *codeid = row[0]; 
    char *maxdate = row[1]; 

    info[i].id=i; 
    strcpy(info[i].codeid, codeid); 
    strcpy(info[i].lastdate, maxdate); 

    i++; 
} 
... 

lastdate ist in Form YYYYMMDD und Codeid eine Zeichenfolge.

Beim Drucken Array, warum ist es "Lastdate ist in Ordnung, aber Codeid, die Zeichenfolge ist nur leer?

ID: 0 
    SHORT: 
    LAST DATE : 20170929 

ID: 1 
    SHORT: 
    LAST DATE : 20170929 
... 
+0

Wenn 'codeID' eine Zeichenkette ist, dann sollte' row [0] 'auch eine Zeichenkette enthalten. Statt 'char * codeID = row [0];' 'char * codeid = & row [0];' verwenden. – Gaurav

+0

Das gibt mir eine Warnung: Initialisierung von inkompatiblen Zeigertyp [-Wincompatible-Zeiger-Typen] char * codeid = & row [0]; – Ommik

+2

Sie reservieren keinen Speicherplatz für den Nullabschluss für das letzte Datum, und Sie überprüfen überhaupt keine Zeichenfolgenlänge und stellen sich für Pufferüberläufe ein. –

Antwort

2

Sie benötigen lastdate groß genug, um die 8 Zeichen des Datums und der Nullabschluss zu halten, so sollte die Struktur sein:

struct staff{ 
    int id; 
    char lastdate[9]; 
    char codeid[8]; 
}; 

Sie wurden außerhalb des Arrays zu schreiben, was dazu führt, undefiniertes Verhalten.

Verwandte Themen