2013-06-03 19 views
8

Come memcpy la matrice bidimensionale in C:come memcpy l'array bidimensionale in C?

Ho una matrice bidimensionale:

int a[100][100]; 

int c[10][10]; 

voglio usare memcpy per copiare i tutti i valori in ordine c per array a, come fai questo usando memcpy?

int i; 
for(i = 0; i<10; i++) 
{ 
    memcpy(&a[i][10], c, sizeof(c)); 
} 

è corretto?

+1

che dipende da dove si desidera che i valori di andare. Sembra non proprio quello che probabilmente vuoi. –

+6

Hai 100 volte la capacità in 'a'. Quali elementi di 'a' vuoi tenere una copia di' c'? – simonc

+0

Altro come 'sizeof (c [i])', non? –

risposta

10

che dovrebbe funzionare:

int i; 
for(i = 0; i<10; i++) 
{ 
    memcpy(&a[i], &c[i], sizeof(c[0])); 
} 
2

Non penso sia corretto, no.

Non è possibile per memcpy() conoscere il layout in memoria di a e "rispettarlo", esso sovrascriverà sizeof c byte adiacenti che potrebbero non essere ciò che si intende.

Se si desidera copiare in un "sub-quadrato" di a, è necessario farlo manualmente.

2

Va in realtà essere:

for(i = 0; i < 10; ++ i) 
{ 
    memcpy(&(a[i][0]), &(c[i][0]), 10 * sizeof(int)); 
} 
+0

quando provo a fare & (c [i] [0]), mi dice che errore: nessuna corrispondenza per 'operator []' in '* (c + 924u) [0]' – user2131316

+0

Sei sicuro di averlo digitato correttamente? Il mio compilatore non mi dice nulla .. Quale compilatore stai usando? – cgledezma