2010-10-13 65 views
0

的指针我有一个问题的指针**焦炭

char** color; 

我需要做的

*color; 

价值的副本,因为我需要传递*颜色的功能,但值将被修改,我无法修改原始值。

你会怎么做?

整个代码看起来像这样

Function1(char** color) 
{ 
    Function2(char * color); 
    return; 
} 

我不得不提的是,在功能1和2的指针被用作返回值。

+1

我认为“Char **”应该是“char **”? – andrewmu 2010-10-13 13:05:44

回答

1

版本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); 
} 

心连心

马里奥

+0

我不认为这是可行的,如果我需要修改它在函数2中。 – DogDog 2010-10-13 13:51:57

+0

然后你去版本2,从constcntionTwo删除常量,并且不释放cpMyPresious。按照您的想法使用它 - 一旦完成,就释放它! – 2010-10-13 18:47:17

0

我会建议使用strncpy()来复制该值。你指向的字符串只在内存中一次,使另一个指针不能解决你的问题。

0

假设你没有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); 
    } 
}