繁体   English   中英

不使用 strcat 连接两个字符串

[英]Concatenate two strings without using strcat

我写了一个 function 来连接两个字符串( s = "computer" ; t = "keyboard" ),但我的代码只返回"keyboard" 请指出错误。

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

我不想使用strcat() 这是来自 Stepik 的测试程序,因此我无法更改main function 中的任何内容。 这是问题:编写一个 function 接收两个字符指针并返回一个表示它们连接的新字符指针。

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;
}

当传递给 function 时,你有 s="computer",然后在第一行你用 malloc 重新分配它,所以“computer”消失了。 您可以逐步调试程序,也可以将值打印到控制台。 这将帮助您找到错误。

你走在正确的轨道上:

  • 您分配了正确数量的 memory,
  • 您正确复制第二个字符串,
  • 您正确设置了 null 终结器,
  • 您将指针返回到分配的块。

然而也存在一些问题:

  • 您用malloc()返回的指针覆盖指向第一个字符串的指针,
  • 您从分配的 memory 块中读取而不是复制第一个字符串:这具有未定义的行为,
  • (次要)参数字符串应声明为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 != '\0') {
        *p++ = *s++;
    }
    while (*t != '\0') {
        *p++ = *t++;
    }
    *p = '\0';
    return ret;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM