2017-04-18 51 views
1

我想將兩個數組中的元素複製到第三個中。
我不明白爲什麼它不起作用。
我確信這兩個數組是正確填充的,但出於某種原因,實際的複製不起作用 - 當我打印arr3的元素時,我會得到一些隨機數。C語言複製數組 - 代碼錯誤

#include <stdio.h> 

int main() 
{ 
    int arr1[10], arr2[10], arr3[20]; 
    int i, n; 


    printf("Enter a number of elements to be stored in each array (up to 10): "); 
    scanf("%d", &n); 
    printf("Enter the %d elements to the first array:\n", n); 
    for (i = 0; i < n; i++) 
    { 
     printf("Element %d: ", i + 1); 
     scanf("%d", &arr1[i]); 
    } 
    printf("Enter the %d elements to the second array:\n", n); 
    for (i = 0; i < n; i++) 
    { 
     printf("Element %d: ", i + 1); 
     scanf("%d", &arr2[i]); 
    } 
/* 
// A test to make sure first 2 array are filled by the user- works 

    for(i = 0; i < n; i++) 
     printf("%d ", arr1[i]); 
    for(i = 0; i < n; i++) 
     printf("%d ", arr2[i]); 

*/ 
    // something wrong here, the elements are not coppied to the third array 
    for(i = 0; i < n; i++); 
      arr3[i] = arr1[i]; 
    for(i = n; i < 2 * n; i++) 
     arr3[i] = arr2[i]; 


    for(i = 0; i < 2 * n; i++) 
     printf("%d\n", arr3[i]); 

    return(0); 
} 
+0

'ARR3 [I] = ARR2 [I];':arr2'的'下標應從'0'啓動。 – BLUEPIXY

+0

'#include memcpy(arr3,arr1,n * sizeof(* arr1)); memcpy(arr3 + n,arr2,n * sizeof(* arr2));' – BLUEPIXY

+1

注意一個額外的(不正確的)分號! – Olaf

回答

3

您正在閱讀過arr2的結尾,試試這個;

for (i = 0; i < n; i++) 
     arr3[i] = arr1[i]; 
for (i = 0; i < n; i++) 
    arr3[n+i] = arr2[i]; 
+0

謝謝。我明白你的代碼爲什麼起作用,我不明白爲什麼我的代碼不工作。可以說n = 3。當我從arr2複製時,我從arr3 [3]開始,以arr3 [5]結束。這是什麼錯誤? – Hana

+1

arr1和arr2有元素0,1和2.當n是3.如果你第一次複製arr1 [0..2]到arr3 [0..2],那麼你嘗試複製arr2 [3..5]到arr3 [3..5]但arr2在那裏沒有數據。你明白嗎? – cleblanc

+0

我現在要做。謝謝。 找不到解決問題的地方。 – Hana

-1

那是因爲你的代碼正在讀取ARR2 [10],ARR2 [11] ..... ARR2 [19] (如果n = 10),不存在所有這些值,因爲ARR2只有10個值。你可以使用這個。

for (i=0; i<n; i++) 
arr3[n+i]=arr2[i]; 

for (i=n; i<n*2; i++) 
arr3[i]=arr2[i-n];