0

如果这太入门级,我很抱歉,但我尝试实现strcpystrncat()的库函数如下:

#include <stdio.h>

void strncat (char *s, char *t, int n) {
// malloc to extend size of s
s = (char*)malloc (strlen(t) + 1);

// add t to the end of s for at most n characters
while (*s != '\0') // move pointer
    s++;

int count = 0;

while (++count <= n)
    *s++ = *t++;

*(++s) = '\0';
}

int main () {
char *t = " Bluish";
char *s = "Red and";

// before concat
printf ("Before concat: %s\n", s);

strncat(s, t, 4);

// after concat
printf ("After concat: %s\n", s);

return 0;
}

它编译并运行良好......只是它根本没有连接!

非常感谢任何反馈...谢谢!

4

1 回答 1

3

看起来你用你的 malloc 重新定义了 s 指针,因为你已经完成了它,它并不指向你的第一个连接字符串。

首先函数返回类型应该是 char*

char* strncat (char *s, char *t, int n)

之后,我认为您应该创建本地字符指针。

char* localString;

使用 malloc 通过此指针分配空间

localString = malloc (n + strlen(s) + 1); 

而且你不需要在这里进行类型转换,因为 malloc 自己做

事实上,你应该在这里使用你的尺寸参数 (n),而不是 strlen(t)

并在使用此指针执行所有连接操作后返回它

return localString
于 2012-04-28T06:16:22.310 回答