我自己的类似strcat()函数只打印一个字符数组

时间:2017-11-24 13:46:45

标签: c arrays string.h

我一直在努力练习编程,所以我决定尝试自己输入strcat()函数,或者你知道的类似函数。我输入此代码是为了继续进行,我不知道问题出在哪里。

#include <stdio.h>
#include <stdlib.h>


void main(){

  int i, j;
  char a[100]; char b[100];
    printf("enter the first string\n");
    scanf("%s", &a);
    printf("enter the second string\n");
    scanf("%s", &b);

    for(i =0; i<100; i++){
      if(a[i] == '\0')
      break;
    }


  //  printf("%d", i);

   for(j = i; j<100; j++){
      a[j+1] = b[j-i];
      if(b[j-i] == '\0')
      break;
  }

    printf("%s", a);

}

没有语法错误(我希望) 编译器给我的结果是:它没有连接字符串,没有任何反应。

它为我提供了与用户输入的相同数组相同的数组,有没有人有答案?

PS:我还不知道指针。

2 个答案:

答案 0 :(得分:1)

strcat实现为“天真的字节复制循环”并不难,只需执行以下操作:

#include <stdio.h>
#include <string.h>

char* strdog (char* restrict s1, const char* restrict s2)
{
  s1 += strlen(s1); // point at s1 null terminator and write from there
  do
  {
    *s1 = *s2; // copy characters including s2's null terminator
    s1++;
  } while(*s2++ != '\0'); 

  return s1;
}

int main(void)
{
  char dst[100] = "hello ";
  char src[] = "world";

  strdog(dst, src);
  puts(dst);
}

专业图书馆将在“对齐的数据块”的基础上进行复制,以获得轻微的性能提升。

答案 1 :(得分:0)

我建议这样做,更容易,你可以更好地理解。 注意:&#39; / 0&#39; character是C中数组中的最后一个字符,它实际上是关闭我的字符串。这就是为什么我最后把它放到fullStr的原因。为什么我不把它们用于第一和第二阵列?因为我设置了一个固定的长度,并且在用scanf扫描后它已经存在了。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char first[4];
  char second[7];
  char fullStr[10];
  int i = 0;
  int x = 0;

  printf("Type your first name:\n");
  scanf("%s", first);
  printf("Type your second name:\n");
  scanf("%s", second);

  while (first[x] != '\0')
    {
      fullStr[i] = first[x];
      i++;
      x++;
    }
  x = 0;
  while (second[x] != '\0')
    {
      fullStr[i] = second[x];
      i++;
      x++;
    }
  fullStr[i] = '\0';
  printf("%s\n", fullStr);
  return (0);
}

输出:

Type your first name:
Joe
Type your second name:
Martin
JoeMartin

尝试精确计算C中数组的长度。你应该学会指针和malloc。