【问题标题】:Merging multiple string arrays into one将多个字符串数组合并为一个
【发布时间】:2015-02-05 09:31:52
【问题描述】:

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

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 中添加一个空终止字符('\0'
  • 这与您的问题无关,但因为这似乎是为了分配:您在变量名中拼错了length
  • @fenceop 我没注意到,谢谢 :)

标签: c arrays string


【解决方案1】:

您没有初始化AllChar 数组,因此它的每个元素中都有垃圾。 只需将最后一块垃圾替换为'\0'

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

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

char AllChar[50] = "";

【讨论】:

  • 我不能投票赞成你的答案..但说真的谢谢你,我完全忘记了。
  • 不,这是定义语句,因为它包含char 类型。 50 是数组的长度,而不是元素。 char a[50]; // uninitialized ... char b[50] = ""; // initialized ... b[49] = 0; // change one element of b
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 2015-12-13
  • 2021-05-12
  • 2018-10-31
相关资源
最近更新 更多