【问题标题】:Concatenating two arrays连接两个数组
【发布时间】:2015-07-08 14:09:43
【问题描述】:

我试图创建一个程序,它接收两个数组并将它们连接起来以创建一个新字符串。这是两个字符串。

 char a[8]={"hellostr"};
 char b[8]={"HELLOSTR"};

谁能告诉我如何连接并显示这个连接的字符串?我试图寻找它,但不能理解它。

【问题讨论】:

  • string arrays 是什么?
  • 我的意思是两个声明为字符串的数组
  • 这些不是字符串。请注意,在 C 中,sting 只是一个 char [] 和一个尾随 '\0'。由于您没有为此保留足够的空间,因此它不是字符串。并且:你不能declare一个字符串 - 出于同样的原因!

标签: c arrays string concatenation


【解决方案1】:

你需要使用string.h中的strcat()函数。

一个示例算法:

  1. 定义一个数组(例如destarr[128]足够大来保存结果(连接字符串)。
  2. memset()destarr0
  3. 使用strcat(destarr, a)strcat(destarr, b) 一个接一个地连接。

也就是说,

 char a[ ]={"hellostr"};

被认为更好,更不容易出错

char a[8]={"hellostr"};

作为,

  • 在前一种情况下,编译器负责根据需要分配内存,并在 mind 中使用空终止符。数组可以用作字符串
  • 在后一种情况下,空终止符没有空间,因此,该数组既不能被视为也不能用作字符串

【讨论】:

  • 谢谢你的例子。我还有一个问题。现在,如果我只想显示这个连接字符串中的一个字符,我该怎么做?
  • 我不同意前者不太容易出错。因为如果您打算让字符串正好 x 个字符长,那么您不希望编译具有比这更多字符的代码。例如,错误代码char a[8]={"hellostr"}; 应该产生编译器诊断,因此希望程序员得到一记耳光:“嘿,你没有考虑空终止符!将你的代码修复为 [8+1]。”而不是“这里一切正常,即使这里可能存在错误,也要继续”。
  • @AnamikaAna one of the characters 你是这个意思吗?自然而然地使用索引。
  • @SouravGhosh 实际上 gcc 在启用最大警告的情况下不会对此发出警告。很奇怪。
  • @SouravGhosh 我已经发布了一个问题here,也许有人知道更多:)
【解决方案2】:

strcat函数可以使用。

标题 -string.h

如果你想在没有strcat 函数的情况下这样做,那么你可以编写一个简单的函数 -

  void concatenate(char a[], char b[])
  {
     int c, d;

      c = 0;

     while (a[c] != '\0')
   {
        c++;    
   }

     d = 0;

   while (b[d] != '\0') 
    {
       a[c] = b[d];
       d++;
       c++; 
    }

       a[c] = '\0';
  }

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2013-04-06
    • 2012-10-05
    相关资源
    最近更新 更多