将多个字符串数组合并为一个

时间:2014-12-07 18:05:27

标签: c arrays string

我正在尝试将三个字符串数组合并为一个新字符串。

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;
}

1 个答案:

答案 0 :(得分:1)

你没有初始化AllChar数组,所以它的每一个元素都有垃圾。 只需用'\0'

替换最后一块垃圾
AllChar[j] = 0; // after the last update loop

或初始化数组(所有这些;在C中没有部分初始化)

char AllChar[50] = "";