2010-10-13 16 views
0

J'ai unproblème avec des pointeurs de pointeur ** ombles

char** color; 

que je dois faire une copie de la valeur de

*color; 

Parce que je dois passer * couleur à une fonction, mais la valeur sera modifiée et je ne peux pas avoir la valeur d'origine à modifier.

Comment le feriez-vous?

Le code tout ressemblerait à ceci

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

Je dois mentionner que les pointeurs dans function1 et 2 sont utilisés comme une valeur de retour.

+1

Je suppose que "Char **" devrait être "char **"? – andrewmu

Répondre

1

Version 1

functionTwo(const char* color) 
{ 
    //do what u want 
} 

functionOne(char** color) 
{ 
    functionTwo(*color); 
} 

ou une version deux

functionTwo(const char* color) 
{ 
    //do what u want 
} 

functionOne(char** color) 
{ 
    char* cpMyPrecious = strdup(*color); 

    functionTwo(cpMyPrecious); 

    free(cpMyPreciuos); 
} 

HTH

Mario

+0

Je ne pense pas que cela fonctionne si j'ai besoin de le modifier dans la fonction 2. – DogDog

+0

Ensuite, vous allez avec la version 2, déposez le const de fucntionTwo, et ne libérez pas le cpMyPresious. Utilisez-le comme vous le pensez - et une fois que vous avez terminé, libérez-le! –

0

Je suggère d'utiliser strncpy() pour dupliquer la valeur. la chaîne que vous pointez est dans la mémoire juste une fois, en faisant un autre pointeur ne résout pas votre problème.

0

En supposant que vous ne pas strdup() disponible (il ne fait pas partie de la bibliothèque standard) , vous feriez quelque chose comme ceci:

#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); 
    } 
}