2016-09-27 3 views
0

Ich habe bereits diesen Code in C Sprache, ist eine Zeichenfolge von 15 Daten durch Kommas getrennt der Code teilt die Zeichenfolge durch Komma und speichert alle Daten in einer einzigen Variablen namens Array [], das Problem ist Ich habe das letzte Datenkomma, wenn nach dem letzten Komma keine Daten vorhanden sind, dann die Variable x15 = 0, aber wenn es einen Wert nach dem letzten gibt, wandle diesen Wert in einen int um. Ich drucke den Wert des Arrays [15], um zu verifizieren, und das ist Null, so dass ich eine Bedingung dafür, aber nicht arbeiten, das Programm nur nach dem Kompilieren brechen.null in C-Sprache vergleichen

char buf[] ="¶bL0 L3,01,+08590323,-079343001,010215,00000000000000,-tN,000,012689997,001219456,000,7FF2,C07F,0,4,"; 

printf("\n \n string=[%s]\n\n", buf); 
int i = 0; 
int u; 
char *p = strtok (buf, ","); 
char *array[16]; 
char *y15; 
while (p != NULL) 
{ 
    array[i++] = p; 
    p = strtok (NULL, ","); 
} 

for (i = 0; i <16; ++i){ 
     if(array[15] == NULL){ 
      wbt.x15=0; 
     }else{ 
     wbt.x15=atoi(array[15]); 
     } 

//printf("data: [%s]\n", array[i]); 
} 
+0

Können Sie Ihre Frage neu zu schreiben? Absätze existieren aus einem Grund. – nbro

+0

Warum nicht einen vernünftigen Haltepunkt setzen, e. G. am Anfang der 'for'-Schleife, zusammen mit einer Überwachung von' array', und dann durch die Programmausführung gehen? Sie können sehen, wie sich die Werte des Arrays ändern und wann. – Jireugi

+0

Das Programm ist nach dem Kompilieren kaputt gegangen ... Was haben Sie gemacht, nachdem Sie das Programm kompiliert haben? Programme brechen nicht einfach nach dem Kompilieren, sie brechen in deinem Gehirn oder wenn du sie schreibst. Aber wenn Sie ein Programm kompiliert haben, bricht es nicht spontan. –

Antwort

1

Sie verwenden ein nicht initialisiertes Array-Element, das Ursache für undefiniertes Verhalten ist.

Sie haben:

char *array[16]; 

Die Elemente des Arrays nicht initialisiert sind. Und dann gehen Sie zu verwenden:

if(array[15] == NULL){ 
    wbt.x15=0; 
    }else{ 
    wbt.x15=atoi(array[15]); 
    } 

Es ist nicht klar, warum Sie für jede Iteration der Schleife, dass der Check haben, aber das ist ein anderes Problem. Das Problem mit dem gebuchten Code ist, dass array[15] nicht initialisiert ist. Dieser Wert ist ein Problem.

Vergewissern Sie sich, dass Sie array richtig initialisiert haben. Verwendung:

char *array[16] = {0}; 

Außerdem glaube ich, Ihre for Schleife wie etwas sein muss:

for (i = 0; i <16; ++i) 
{ 
    int x = 0; 
    if(array[i] != NULL) 
    { 
     x = atoi(array[i]); 
    } 

    // Now use x. 
} 
+1

Basierend auf der Art und Weise, wie das Array mit der 'while/strtok'-Schleife aufgebaut wird, scheint mir die' for'-Schleife einfach auf null zu enden: 'if (array [i] == NULL) break;' –

+0

Vielen Dank, es ist einfach die Initialisierung des Arrays. Jeden Tag lernen wir beim Programmieren, grundlegende Dinge können unseren Kopf brechen, haha. –

+0

@CraigEstey, stimme zu. –

Verwandte Themen