#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 … извините, я использовал неправильное имя :-/