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

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

最佳答案

您没有初始化 AllChar 数组,因此它的每个元素中都有垃圾。 把最后一 block 垃圾换成一个'\0'

就可以了
AllChar[j] = 0; // after the last update loop

或者首先初始化数组(全部;C 中没有部分初始化)

char AllChar[50] = "";

关于c - 将多个字符串数组合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27345942/

相关文章:

c - 有没有一种可移植的方法来查询 void* 指针的类型?

c - 指针算法优于数组下标的令人信服的例子是什么?

c - 为什么这里需要禁用中断?

java - 将新对象分配给通用数组索引

java - 从文本文件中读取和拆分整数以加在一起?

c - 如何声明外部结构?

php - 在 json_decode/多维数组之后访问 JSON 数组

javascript - .map() 仅返回数组中的最后一个对象

php - 比较一个字符串和一个 php 数组,只显示匹配项

java - 具有多个字符串参数的 Bash 脚本