изменение значения из функции

#c #c #function #pointers

#c #c #функция #указатели

Вопрос:

Я хочу изменить массив символов 2dim в функции.

Я выделяю пространство как

 char **u;
u = new char * [ MAX_DEPTH ];
for (i=0; i<MAX_DEPTH; i  )
    u[ i ] = new char [ BUFFER_SIZE ];
  

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

 rem(char ***arr, int max_length, char *url)
{
    int idx=0;
    char * p;
    int i;

    p = strtok (url,"/"); 

    while (p != NULL amp;amp; idx < max_length)
    {

        for (  i=0; i<maxUrlSize-1 amp;amp; p[i] != ''; i  )
            (*arr)[idx][i] = p[i];
        for (     ; i< maxUrlSize-1; i  )
            (*arr)[idx][i] = '';
    }
}
  

функция будет использоваться в моей основной программе.

 rem( amp;u, MAX_LEN, url);
  

но после выхода из функции в нем ничего нет. Может ли кто-нибудь объяснить мне, как использовать указатели таким образом?

Комментарии:

1. Очевидно, что в этом нет ничего неправильного, но фрагменты длиной более 1 строки действительно помогли бы — мы должны сделать вывод, что реализация функции является rem (char *** tmp, int ?), чтобы код хотя бы начал приобретать смысл.

2. Весь опубликованный вами код правильный.

3. С точки зрения функции этот код выглядит абсолютно нормально. Не могли бы вы, пожалуйста, предоставить код о том, как вы вызываете этот метод из других частей программы.

4. @Roby: Пожалуйста, отредактируйте и выровняйте свой код. Один из участников приложил все усилия, чтобы сделать это для вас в первый раз, вы должны научиться этому оттуда… Не может быть бесконечного цикла ваших правок, а затем встречных правок, чтобы сделать его читаемым.

5. Не видя фактического кода в rem , то, что у вас есть, выглядит нормально. Однако, если вы не перераспределяете пространство, назначенное u внутри функции rem , вам действительно не нужно передавать amp;u здесь. Вместо этого просто передайте u . Принимающий параметр tmp должен быть просто char ** , и вы получили бы к нему доступ как tmp[i][j] . РЕДАКТИРОВАТЬ для комментария: что такое tmp ? Выглядит как глобальный.

Ответ №1:

Вам нужно изменить ссылку на tmp в вашей функции на arr . Вы вообще не обращаетесь к параметру arr . Кроме того, вам не нужно char *** здесь, поскольку вы не меняете пространство, выделенное для u . Вместо этого у вас должен быть параметр char **arr , к которому вы обращаетесь как arr[i][j] . И затем вы должны передать u в rem , а не amp;u .

Комментарии:

1. вы правы, я удалил несколько строк кода и вставил его вместе… tmp — это arr … извините, я использовал неправильное имя :-/