Основной вопрос об указателе C с использованием 'strcpy' - PullRequest
3 голосов
/ 13 октября 2010

Человек, указатели продолжают доставлять мне неприятности.Я думал, что понял концепцию. (По сути, вы будете использовать * ptr, когда хотите манипулировать фактической памятью, сохраненной в том месте, на которое указывает ptr. Вы просто используете ptr, если вы хотите переместить этот указатель, выполняя такиекак ptr ++ или ptr--.) Итак, если это так, если вы используете звездочку для манипулирования файлами, на которые указывает указатель, как это работает:

char *MallocAndCopy( char *line ) {

    char *pointer;
    if ( (pointer = malloc( strlen(line)+1 )) == NULL ) {
        printf( "Out of memory!!!  Goodbye!\n" );
        exit( 0 );
    }
    strcpy( pointer, line );

    return pointer;
}

malloc возвращает указатель, поэтому я понимаю, почему «указатель» в условии if не использует звездочку.Однако в функции strcpy она отправляет СОДЕРЖАНИЕ строки в СОДЕРЖАНИЕ указателя.Разве это не должно быть:

strcpy( *pointer, *line);

?????Или я правильно понимаю указатели, и именно так работает функция strcpy?

Ответы [ 11 ]

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

Я понимаю, почему вы ожидаете передать *pointer и *line в strcpy.Но помните, что pointer указывает на место в памяти, где хранится контент и где strlen(line)+1 байт памяти зарезервировано и выделено.Таким образом, strcpy делает именно то, что копирует strlen(line) байтов памяти, начиная с адреса line, в соответствующие ячейки, начиная с адреса pointer.Если вы передадите *pointer и *line, strcpy будет иметь доступ только к первому char, а не к остальным strlen(line)-1.Надеюсь, это прояснит ваше замешательство по поводу указателей и почему нам нужно передать указатели на strcpy.

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