Передача строки в функцию в C - PullRequest
3 голосов
/ 10 ноября 2010

Приведенный ниже код читает содержимое файла в буфер, а затем что-то с ним делает.

char *getData(){
    char *buf = (char*) malloc(100);
    //write file contents to buf
    return buf;
}

char *bar(char *buf){
    //do something with buf
    return buf;
}

int main(void){
    char *result;

    result = bar(getData());

    return 0;
}

return buf; в строке 9 работает нормально - возвращает всю строку.Вопрос в том, как я могу получить доступ к отдельным символам в buf в функциональной панели?

Ответы [ 6 ]

7 голосов
/ 10 ноября 2010

Если вы хотите получить доступ к отдельным символам, вы можете сделать это, как если бы вы использовали любую строку в любом другом месте: buf[index] (для указателей ptr[index] точно так же, как *(ptr+index)).

Кстати, в этом коде есть malloc, но не соответствует free - вы теряете память.В такой маленькой программе проблема не очевидна (приложение немедленно завершается, поэтому операционная система автоматически освобождает все еще не освобожденную память), но в более крупных программах проблема может стать серьезной.

2 голосов
/ 10 ноября 2010

Поскольку char * является массивом строк, вы должны использовать индексатор buf [index] с ним ...

2 голосов
/ 10 ноября 2010

Вы можете иметь индексирование.

if (buf != NULL) {
    int i = 0;
    while (buf[i] != '\0') {
        // Do Processing
        ++i;
    }
}
1 голос
/ 10 ноября 2010

Может быть, я не понимаю ваш вопрос, но на первый взгляд я бы сказал, что вам просто нужно использовать доступ к массиву:

char *bar(char *buf)
{
  char newFifthCharacter = 'X';
  buf[4] = newFifthCharacter;
  return buf;
}

Обратите внимание, что вам нужен способ проверки границ, чтобы вы не писали за пределы массива. Вы можете использовать функцию strlen в bar или иметь целочисленный параметр, содержащий длину. Передача длины, вероятно, лучшая практика.

1 голос
/ 10 ноября 2010

Вы можете обратиться к строке (char *) в виде массива char:

 char x = buf[0];
1 голос
/ 10 ноября 2010

buf [i] (или * (buf + i)) - это i-й символ в buf. * ​​1001 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...