在不使用 strcat 的情况下连接两个字符串

Concatenate two strings without using strcat

我写了一个函数来连接两个字符串(s = "computer"t = "keyboard"),但是我的代码只有returns "keyboard"。错误之处请指出

char *concat(char *s, char *t) {
    s = malloc((strlen(s) + strlen(t) + 1) * sizeof(char));
    char *p = s;
    while (*p != '[=10=]') {
        ++p;
    }
    while (*t != '[=10=]') {
        *p++ = *t++;
    }
    *p = '[=10=]';
    return s;
}

我不想使用 strcat()。这是 Stepik 的测试程序,所以我无法更改 main 函数中的任何内容。 这里的问题是:编写一个函数接收两个字符指针和returns一个表示它们连接的新字符指针。

将 s="computer" 传递给函数时,然后在第一行用 malloc 重新分配它,因此“computer”消失了。 您可以逐步调试您的程序,或者只是将值打印到控制台。这将帮助您找到错误。

char *myconcat(const char *s1, const char *s2)
{
    size_t len1,len2;
    char *result = malloc((len1 = strlen(s1)) + (len2 = strlen(s2)) + 1);

    if(result)
    {
        memcpy(result, s1, len1);
        memcpy(result + len1, s2, len2 + 1);
    }
    return result;
}

你走在正确的轨道上:

  • 您分配了正确的内存量,
  • 你正确复制了第二个字符串,
  • 您正确设置了空终止符,
  • 你 return 指向已分配块的指针。

但是有一些问题:

  • 你用 malloc()
  • 编辑的 return 覆盖指向第一个字符串的指针
  • 你从分配的内存块中读取而不是复制第一个字符串:这有未定义的行为,
  • (次要)参数字符串应声明为 const char *,因为您不修改这些字符串。

这是更正后的版本:

#include <stdlib.h>
#include <string.h>

char *concat(const char *s, const char *t) {
    char *ret = malloc((strlen(s) + strlen(t) + 1) * sizeof(char));
    char *p = ret;
    while (*s != '[=10=]') {
        *p++ = *s++;
    }
    while (*t != '[=10=]') {
        *p++ = *t++;
    }
    *p = '[=10=]';
    return ret;
}