2010-10-13 103 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); 
    } 
}