【问题标题】:implement strcat() function in C在 C 中实现 strcat() 函数
【发布时间】:2021-04-01 13:36:09
【问题描述】:

我正在尝试在 C 中实现 strcat(),但坚持认为输出结果是重复的 src。

这是我的代码。


void my_strcat(char des[], char src[]) {
    int i = 0, j = 0;
    while (des[i] != '\0')
        i += 1;
    while (src[j] != '\0') {
        des[i + j] = src[j];
        j += 1;
    }
    des[i + j] = '\0';

    printf("%s", des);
}

int main() {
   char des[1000], src[100];
   for(int i = 0; i < 2; ++i) {
        printf("src: ");
        scanf("%s", src);
        my_strcat(des, src);
    }
    
    printf("%s", des);

}

输出与我之前预期的不同。例如:

源代码:一个 来源:乙 des: aabb

【问题讨论】:

  • my_strcat 不返回任何内容,但您在这里使用它的返回值:printf("%s", my_strcat(des, src))。你没有得到至少 c 编译器警告吗?
  • @Jabberwocky 是我的错字!我只想使用 void 类型。
  • 你必须初始化des。 des[0]='\0';
  • 那么你可能想要printf("%s", des)
  • @Holger 我添加了,但它仍然不起作用。

标签: c string strcat


【解决方案1】:

你可能想要这个:

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

void my_strcat(char des[], const char src[]) {   // better use const her
  int i = 0, j = 0;
  while (des[i] != '\0')
    i += 1;
  while (src[j] != '\0') {
    des[i + j] = src[j];
    j += 1;
  }
  des[i + j] = '\0';

  // printf("%s", des);  // dont print des here
}

int main() {
  char des[1000];
  char src[100];
  des[0] = 0;   // initialize des to a zero length string      
  for (int i = 0; i < 2; ++i) {
    printf("src: ");
    scanf("%s", src);
    my_strcat(des, src);
  }

  printf("%s", des);   // print the destination
}

【讨论】:

  • 非常感谢!有效。但是请您解释一下为什么在 my_strcat() 中使用 printf() 不起作用?
  • @KeinKeinKein 它正在工作,但它不应该在那里。毕竟你的函数被称为my_strcat 而不是my_strcat_and_print_result
  • @KeinKeinKein 唯一相关的行是des[0] = 0;。当您初始化目标时,您的示例将在有或没有 printf() 调用的情况下工作。
猜你喜欢
  • 2016-11-14
  • 2019-03-26
  • 2011-01-30
  • 2010-12-23
  • 2014-04-28
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
相关资源
最近更新 更多