2016-05-08 11 views
-1

Ich versuche, einige 2D-Arrays von Strings in eine andere zu kopieren. Ich habe 2 Arrays, die wie folgt aussehen:Kopieren von 2D-Arrays in C

char *tabA[SIZE]; 
char *tabB[SIZE]; 

ich tabA[indexA] zu tabB[indexB] aber strcpy(tabB[indexB], tabA[indexA]) kopieren wollen überhaupt nicht funktioniert, wird Programm abgestürzt (aber Compiler liefert keine Fehler).

+1

Haben Sie malloc() alles wie nötig vor strcpy() 'ing? –

+0

Kopieren Sie den Zeiger des Speichers, auf den er zeigt? – 2501

Antwort

1

strcpy (Tabb [indexB], taba [indexA]) überhaupt nicht funktioniert, Programm bekommt

abgestürzt

Möglicherweise weil tabB[indexB] nicht initialisiert und NULL oder ungültige Zeiger enthalten.

Lösung
Speicher tabB Weisen statisch ein 2D-Array als char tabB[SIZE1][SIZE2] = {{0}}; oder dynamisch als for(i = 0; i < SIZE; ++i) tabB[i] = malloc(...); oder strdup verwendet werden. Stellen Sie bei dynamischer Zuweisung sicher, dass Sie free und den Speicher nicht verlieren.

1

Ich memcpy von string.h verwenden, wie dies prototypisiert:

void *memcpy(void *dest, const void *src, size_t n); 

Die memcpy() Funktion kopiert n Bytes aus dem Speicherbereich src zum Speicher Bereich dest.

Für weitere Einzelheiten lesen Sie das Handbuch von memcpy mit dem Befehl man memcpy auf einem Terminal.

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

const size_t SIZE=8; 

int main() 
{ 
    char *data[] = {"jan", "fev", "mar", "apr", "mai", "jun", "jul", "aug"}; 
    char *data2[SIZE]; 

    memcpy(data2, data, sizeof(char*) * SIZE); 

    for (int i = 0; i < 8; ++i) 
    printf("data = %s, data2 = %s\n", data[i], data2[i]); 

    return (0); 
} 
+1

@MohitJain 'sizeof (char *)' ist nicht 'sizeof (char)'. – fluter

0
tabB[indexB] = strdup(tabA[indexA]); 

funktioniert perfekt :)