制作一份char *的副本

前端之家收集整理的这篇文章主要介绍了制作一份char *的副本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个函数接受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&C++相关文章