我可以使用 malloc 模拟 strcpy 吗?

标签 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

为什么会这样,有什么方法可以让这段代码按照我的预期工作吗?

最佳答案

你不能这样做:strcpy 期望两个内存块都准备就绪 - 一个用于读取字符串,另一个用于写入字符串。这两个地址都应该有足够的内存来存储以 null 结尾的 C 字符串的实际内容。

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

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

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

关于我可以使用 malloc 模拟 strcpy 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40053929/

相关文章:

c - 在没有哨兵的情况下反转循环双端队列

C - 在编写之前构建我的字符串

c - 使用 C _Generic 宏区分 const char * 和 char *

c - 为什么不考虑将 strnlen() 包含在 C23 中?

android - 避免 android native 代码 (C++) 中的竞争条件

c - 带字符串的多行内联汇编宏

c - 尝试在 Ubuntu 的 makefile 中运行多个命令

c - 为什么在 C 中调用函数时允许传递的参数数量不足?

c - regexec 和 regcomp 比我自己做 strncmp 更有效吗?

c++ - 当由 ""推导时, `auto` 的确切类型是什么?