我可以使用malloc模拟strcpy吗?

时间:2016-10-15 00:59:42

标签: c c-strings

我正在尝试从头开始为一个类创建一个strcpy函数。虽然我可以使用for循环并复制单个字符,但我认为我可以使用malloc和指针进行交换以使其更有效。这是我的代码,但我遇到了很多令人困惑的错误。

void notStrcpy(char s1[], char s2[]) { //copies string s1 into s2
char *s3 = (char *) malloc(strlen(s1)); //s3 is now an alias of s1
s2 = *s3;} //dereference s3 to dump s1 into s2

为什么会发生这种情况,有没有办法让这段代码按照我的意图运作?

2 个答案:

答案 0 :(得分:2)

你不能这样做:strcpy期望两个内存块都准备就绪 - 一个用于读取字符串,另一个用于写入字符串。预计两个地址都有足够的内存用于空终止的C字符串的实际内容。

另一方面,malloc为你提供了第三块内存(你需要分配strlen(s)+1,但这是一个完全不同的故事)。字符串复制算法对该块内存没有用处。最重要的是,分配函数的参数对传递给函数的值没有影响,因此s2 = *s3没有按照您的想法进行操作。

长话短说,while ((*s1++ = *s2++));是您最简单的strcpy实施。

注意: malloc可以在字符串复制功能的实现中派上用场,例如strdup。如果您决定尝试一下,请不要忘记为null终止符分配空间。

答案 1 :(得分:0)

@dasblinkenlight谢谢。我的新代码如下:

void totallyNotstrcpy(char s1[], char s2[]) {
int x = 0;
while (x < strlen(s1)+1) {
    s2[x] = s1[x];
    x++;
}
}

作为一个快速的问题,您的代码段如何工作? while循环不需要条件吗?