2012-04-08 9 views
-3

Mögliche Duplizieren:
multidimensional arrays and transferring buffersÜbertragen von Puffern mit mehrdimensionalen Arrays

ich einen Puffer in Arraysegmente von 1800 Zeichen zu speichern versuchen. Wann immer ich in der Lage bin, den Puffer zu übertragen, aber wenn ich versuche, jeden neuen Puffer auszudrucken. Ich bekomme null für die Ausgabe. Was genau mache ich falsch?

Ich habe die Schleife geändert, um Nullabschlüsse am Ende der 2. Dimension hinzuzufügen. Jetzt sagt mir die Ausgabe, dass es null ist. Aber printf("%c") sagt, dass die Daten übertragen wurden.

while(buf_pos < msg_size+1){ 
    if(buf_pos % 1800 == 0){ 
     msg_buff[key_num][cbuf_pos]='\0'; 
     key_num++; 
     cbuf_pos=0; 
     msg_buff[key_num][cbuf_pos]=buf[buf_pos]; 
    }else 
     msg_buff[key_num][cbuf_pos]=buf[buf_pos]; 

    printf("%c",msg_buff[key_num][cbuf_pos]); 
    cbuf_pos++; 
    buf_pos++; 
} 
+0

Jetzt gehe ich davon aus –

Antwort

0

Versuchen Sie, die DRY (Do not Repeat Yourself) Prinzip zu folgen:

key_num = 0; 
cbuf_pos = 0; 
for (buf_pos = 0; buf_pos < msg_size+1; buf_pos++) 
{ 
    if (buf_pos % 1800 == 0 && buf_pos > 0) 
    { 
     msg_buff[key_num][cbuf_pos] = '\0'; 
     key_num++; 
     cbuf_pos = 0; 
    } 
    msg_buff[key_num][cbuf_pos] = buf[buf_pos]; 
    printf("%c", msg_buff[key_num][cbuf_pos]); 
    cbuf_pos++; 
} 

Beachten Sie, dass der modifizierte Code vermeidet Inkrementieren auf dem ersten Zeichen (aber nur testet buf_pos > 0 wenn buf_pos % 1800 Null ist, zu vermeiden

012: die offensichtlichen 1799 mal von 1800.

Ohne die Diagnose der Druckprüfung, würde ich eine Zeile anstelle von zwei oder drei nach den if schreiben

msg_buff[key_num][cbuf_pos++] = buf[buf_pos]; 

Sie könnten Ihren Diagnosedruck, verbessern, unter Verwendung:

printf("m[%d][%d] = %c\n", key_num, cbuf_pos, msg_buf[key_num][cbuf_pos]); 

Dies könnte die Probleme hervorheben (obwohl ich Sie es zu ausführlich schnell gewähren würde bekommt).

Dies erklärt nicht wirklich Ihr Problem, es sei denn die Tatsache, dass Sie beim ersten Durchgang durch die Schleife zu key_num == 1 überspringen, ist das Problem.

Verwandte Themen