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



我写了一个函数来连接两个字符串(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 != '') {
++p;
}
while (*t != '') {
*p++ = *t++;
}
*p = '';
return s;
}

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

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

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

你走在正确的轨道上:

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

然而,也存在一些问题:

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

相关内容

  • 没有找到相关文章

最新更新