2016-03-14 2 views
1

Я работаю с методом, который должен иметь указатель на указатель. Мне было интересно, как я буду получать индивидуальные значения char в этой переменной? Например:Как получить один символ из указателя на указатель в C?

void spacer(char **ptr) { 

    int i; 
    for(i = 0; **ptr[i] != ' '; i++) { 

     printf("Is not space"); 

    } 
} 

Я не уверен, как это сделать, не получив ошибку компиляции или ошибку сегментации.

+0

Что означает 'символ ** значение ptr' представляет семантический ? Является ли это указателем на строку или это массив строк? – Dai

+1

Этот метод не должен принимать указатель на указатель, кстати. Для '* ptr' изменений нет. Учитывая только то, что мы видим, 'char const *' и соответствующий вызов вызывающего абонента должны быть достаточными. – WhozCraig

+0

@dai: "* или это массив строк *" как может переменная 'wtf *' -typed когда-либо быть чем-то другим, а только указателем? – alk

ответ

1

Предполагая ptr точки пригодной памяти и *ptr делают, а затем (*ptr)[i] получает вас char.

1

Если ptr - это всего лишь указатель на два слоя, вы можете переместить его, чтобы сделать локальную переменную, чтобы сделать ее проще.

char* str = *ptr;

Тогда доступ к нему как нормальная строка позже.

str[i] == ' '

быть также осторожным, не выходя из выделенного буфера. Вам нужно либо знать длину, либо следить за нулевым терминатором.

-1

вы можете попробовать это:

char *temp=NULL; 
int i; 
temp=(char *)malloc(strlen(*ptr)); 
memset(temp,'\0',strlen(*ptr)+1); 

for(i=0;i<strlen(*ptr)+1;i++) 
{ 
    if(temp[i] != 32) 
     printf("not space!\n"); 
} 
1

PTR указатель на указатель на char, поэтому де-ссылки его сразу будет направлена ​​на pointer.de-ссылающийся дважды будет направлена ​​на char.

Так **ptr поможет вам первый цикл character.to над символами можно использовать следующие обозначения:

*(*ptr + i) что эквивалентно (*ptr)[i]

Смежные вопросы