c - 复制一个 char*

标签 c string

我有一个接受 char* 作为其参数之一的函数。我需要操纵它,但要保持原始 char* 完好无损。本质上,我想创建此 char* 的工作副本。看起来这应该很容易,但我真的很挣扎。

我的第一个(天真的)尝试是创建另一个 char* 并将其设置为等于原始值:

char* linkCopy = link;

当然,这是行不通的,因为我所做的只是让它们指向同一个地方。

我应该使用 strncpy 来完成这个吗?

我试过以下方法,但它会导致崩溃:

char linkCopy[sizeof(link)] = strncpy(linkCopy, link, sizeof(link));

我是否遗漏了一些明显的东西......?

编辑:抱歉,我试图简化示例,但我在第二个示例中留下了一些较长的变量名称。固定。

最佳答案

sizeof 将为您提供指针的大小。这通常是 4 或 8,具体取决于您的处理器/编译器,但不是指向的字符串的大小。您可以使用 strlen 和 strcpy:

// +1 because of '\0' at the end
char * copy = malloc(strlen(original) + 1); 
strcpy(copy, original);
...
free(copy); // at the end, free it again.

我看到一些答案建议使用 strdup,但这是一个 posix 函数,而不是 C 的一部分。

关于c - 复制一个 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/481673/

相关文章:

删除 "NUL"个字符(在 R 中)

python - 如何访问 Python 字符串中的第一个字符和整数对?

c - 想知道 C 字符串、NULL、空格

将地址传递给数组而不是数组会导致问题吗?

c - 使用链接列表读取文本文件

c - C 中使用 pthread 和信号量的读写器问题

c++ - C/C++ 中的安全字符串复制

c堆内存布局

c - 如果我从两台不同的计算机在 VM 中运行程序,内存地址是否相同?

c++ - 将 char* 数组作为字符串返回 -> 内存泄漏?