使用'strcpy'的基本C指针问题

sta*_*rob 3 c pointers

男人,指针继续给我带来麻烦.我以为我理解了这个概念.(基本上,当你想操纵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;
}
Run Code Online (Sandbox Code Playgroud)

malloc返回一个指针,所以我理解为什么if条件中的"指针"不使用星号.但是,在strcpy函数中,它将行的CONTENTS发送到指针的CONTENTS.不应该是:

strcpy( *pointer, *line);
Run Code Online (Sandbox Code Playgroud)

????? 或者我对指针的理解是正确的,这只是strcpy函数的工作方式吗?

Jen*_*rer 6

C样式字符串是字符字节数组.当您将数组作为指向数组类型的指针传递时,指针包含数组的第一个元素的地址.

strcpy函数将指针指向char源数组的第一个(它是字符串的开头)和指向char目标数组中第一个的指针,并遍历源,直到它到达一个'\0'字符,该字符终止字符串.

这也是为什么当你调用时malloc,传递给它的大小是strlen(line)+1,因为你需要为终止字符分配一个字节(据我所知).