【发布时间】:2020-06-28 14:00:40
【问题描述】:
我写了一个函数来连接两个字符串(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 函数中的任何内容。
问题如下:编写一个函数,接收两个字符指针并返回一个表示它们连接的新字符指针。
【问题讨论】:
-
s = malloc(...)会覆盖您传递的指针,因此输入字符串会丢失。然后,如果您在分配的内存中找到'\0',那是偶然的。 -
char *concat(const char *s, const char *t) { char *u = malloc(strlen(s) + strlen(t) + 1); if (u) sprintf(u, "%s%s", s, t); return u; } -
我讨厌原始问题的措辞(“这是问题:[...]”)。它将指针的值与它们指向的数据的值混为一谈,这正是给 C 学生带来麻烦的领域之一。课程材料未能在这些概念之间建立和保持明确的区别,从而损害使用它们的学生。
-
@pmg sprintf 连接两个字符串。可爱的。
-
我更喜欢你的
memcpy()选项(顺便说一句),谢谢@P__J__
标签: c malloc string-concatenation