2014-12-07 238 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