2013-06-03 22 views
8

Làm thế nào để memcpy mảng hai chiều trong C:làm thế nào để ghi nhớ mảng hai chiều trong C?

Tôi có một mảng hai chiều:

int a[100][100]; 

int c[10][10]; 

Tôi muốn sử dụng memcpy để sao chép tất cả các giá trị trong mảng c để mảng một, làm thế nào để làm điều này bằng memcpy?

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

có đúng không?

+1

Điều đó phụ thuộc vào nơi bạn muốn các giá trị để đi. Có vẻ như không hoàn toàn là những gì bạn có thể muốn. –

+6

Bạn có 100 lần dung lượng trong 'a'. Bạn muốn giữ một bản sao của 'c' nào? – simonc

+0

Giống như 'sizeof (c [i])', không? –

Trả lời

10

Nên hoạt động:

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

Tôi không nghĩ nó đúng, không.

Không có cách nào để memcpy() biết về bố cục trong bộ nhớ a và "tôn trọng" nó, nó sẽ ghi đè lên sizeof c byte liền kề có thể không phải là ý của bạn.

Nếu bạn muốn sao chép vào "hình vuông phụ" của a, thì bạn phải làm như vậy theo cách thủ công.

2

Nó thực sự nên là:

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

khi tôi cố gắng làm & (c [i] [0]), nó cho tôi biết rằng lỗi: không khớp với 'toán tử []' trong '* (c + 924u) [0]' – user2131316

+0

Bạn chắc chắn đã nhập đúng? Trình biên dịch của tôi nói với tôi không có gì .. Trình biên dịch nào bạn đang sử dụng? – cgledezma