2014-12-07 237 views
1

我想將三個字符串數組合併成一個新數組。將多個字符串數組合併成一個

OUTPUT 
ARRAY1 = towers 
ARRAY2 = films 
ARRAY3 = high 
array is: towersfilmshighw 

的事情是,這三個陣列成功合併成一個新的數組,但也有額外的和隨機的字符添加 - 在這種情況下,一個w。我不允許使用指針合併數組。

任何人都可以解釋爲什麼多餘的字符在那裏? 因爲在此之後,我需要刪除重複的字符,它不工作。

這裏是我的代碼:

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

int main() { 
    char array1[10], array2[10], array3[10], AllChar[50]; 
    int lenghtOfArray1, lenghtOfArray2, lenghtOfArray3, i = 0, j = 0, k = 0, z = 0; 

    printf("Array 1"); 
    gets(array1); 
    printf("Array 2"); 
    gets(array2); 
    printf("Array 3"); 
    gets(array3); 

    lenghtOfArray1 = strlen(array1); 
    lenghtOfArray2 = strlen(array2); 
    lenghtOfArray3 = strlen(array3); 

    if (!(lenghtOfArray1 <= 8 && lenghtOfArray2 <= 8 && lenghtOfArray3 <= 8)) { 
    printf("The length of all words must bigger than or equal to eight\n"); 
    } else { 
    while (j < lenghtOfArray1) { 
     AllChar[j] = array1[i]; 
     i++; 
     j++; 
    } 
    while (j < (lenghtOfArray2 + lenghtOfArray1)) { 
     AllChar[j] = array2[k]; 
     k++; 
     j++; 
    } 
    while (j < (lenghtOfArray1 + lenghtOfArray2 + lenghtOfArray3)) { 
     AllChar[j] = array3[z]; 
     z++; 
     j++; 
    } 

    printf("array is :"); 
    for (i = 0; i < (lenghtOfArray1 + lenghtOfArray2 + lenghtOfArray3); i++) { 
     puts(&AllChar[i]); 
     printf("\n"); 
    } 
    } 
    return 0; 
} 
+2

你需要添加一個空 - 終止字符(''\ 0'')到'AllChar' – bolov 2014-12-07 18:08:37

+0

這與你的問題沒有關係,但是因爲這似乎是一個賦值:你在變量名中拼寫'length'。 – fenceop 2014-12-07 18:16:05

+0

@fenceop我沒有注意到,謝謝:) – hodor92 2014-12-07 18:30:05

回答

1

你沒有初始化數組AllChar,所以它有垃圾中的所有元素中的每一個。 只是一個'\0'

AllChar[j] = 0; // after the last update loop 

更換最後一塊垃圾或初始化數組(這一切,有一個在C中沒有的部分初始化)首先

char AllChar[50] = ""; 
+0

我不能表決你的答案..但認真謝謝,它完全放棄了我的想法。 – hodor92 2014-12-07 18:28:33

+0

不,這是定義語句,因爲它包含'char'類型。 '50'是數組的長度,而不是元素。 char a [50]; //未初始化的...'char b [50] =「」; //初始化'...'b [49] = 0; //改變b'的一個元素 – pmg 2014-12-07 18:28:54