Проблем с указатели на указател ** char

имам

char** color;

Трябва да направя копие на стойността на

*color;

Тъй като трябва да предам *color на функция, но стойността ще бъде променена и не мога да променя оригиналната стойност.

Как бихте направили това?

Целият код ще изглежда така

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

Трябва да спомена, че указателите във функция 1 и 2 се използват като връщана стойност.


person DogDog    schedule 13.10.2010    source източник
comment
Предполагам, че Char** трябва да бъде char**?   -  person andrewmu    schedule 13.10.2010


Отговори (3)


Версия 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 );
}

чт

Марио

person Mario The Spoon    schedule 13.10.2010
comment
Не мисля, че това работи, ако трябва да го модифицирам във функция 2. - person DogDog; 13.10.2010
comment
След това отивате с версия 2, пускате const от fucntionTwo и не освобождавате cpMyPresious. Използвайте го както мислите - и след като сте готови, освободете го! - person Mario The Spoon; 13.10.2010

бих предложил да използвате strncpy() за дублиране на стойността. низът, към който сочите, е в паметта само веднъж, създаването на друг указател към него не решава проблема ви.

person Pyjong    schedule 13.10.2010

Ако приемем, че нямате наличен 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);
  }
}
person John Bode    schedule 13.10.2010