我有一个接受 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/