的指针我有一个问题的指针**焦炭
char** color;
我需要做的
*color;
价值的副本,因为我需要传递*颜色的功能,但值将被修改,我无法修改原始值。
你会怎么做?
整个代码看起来像这样
Function1(char** color)
{
Function2(char * color);
return;
}
我不得不提的是,在功能1和2的指针被用作返回值。
的指针我有一个问题的指针**焦炭
char** color;
我需要做的
*color;
价值的副本,因为我需要传递*颜色的功能,但值将被修改,我无法修改原始值。
你会怎么做?
整个代码看起来像这样
Function1(char** color)
{
Function2(char * color);
return;
}
我不得不提的是,在功能1和2的指针被用作返回值。
版本1
functionTwo(const char* color)
{
//do what u want
}
functionOne(char** color)
{
functionTwo(*color);
}
或二版
functionTwo(const char* color)
{
//do what u want
}
functionOne(char** color)
{
char* cpMyPrecious = strdup(*color);
functionTwo(cpMyPrecious);
free(cpMyPreciuos);
}
心连心
马里奥
我不认为这是可行的,如果我需要修改它在函数2中。 – DogDog 2010-10-13 13:51:57
然后你去版本2,从constcntionTwo删除常量,并且不释放cpMyPresious。按照您的想法使用它 - 一旦完成,就释放它! – 2010-10-13 18:47:17
我会建议使用strncpy()来复制该值。你指向的字符串只在内存中一次,使另一个指针不能解决你的问题。
假设你没有strdup()
用(这不是标准库的一部分) ,你会做这样的事情:
#include <stdlib.h>
#include <string.h>
...
void function1(char **color)
{
char *colorDup = malloc(strlen(*color) + 1);
if (colorDup)
{
strcpy(colorDup, *color);
function2(colorDup);
/*
** do other stuff with now-modified colorDup here
*/
free(colorDup);
}
}
我认为“Char **”应该是“char **”? – andrewmu 2010-10-13 13:05:44