Проблема с указателями указателя ** char - PullRequest
0 голосов
/ 13 октября 2010

У меня есть

char** color;

Мне нужно сделать копию значения

*color;

Поскольку мне нужно передать * цвет функции, но значение будет измененои я не могу изменить исходное значение.

Как бы вы это сделали?

Весь код будет выглядеть следующим образом

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

Я должен упомянуть, чтоуказатели в function1 и 2 используются как возвращаемое значение.

Ответы [ 3 ]

1 голос
/ 13 октября 2010

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

НТН

Mario

0 голосов
/ 13 октября 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);
  }
}
0 голосов
/ 13 октября 2010

Я бы предложил использовать strncpy () для дублирования значения. строка, на которую вы указываете, находится в памяти только один раз, и создание еще одного указателя на нее не решит вашу проблему.

...