如果 (* ptr)[variable] 表示 "pointer to an array",那么 (* ptr)[variable] = '\0' 是什么意思?

if (* ptr)[variable] means "pointer to an array", what does mean (* ptr)[variable] = '\0'?

下面的代码按以下方式工作:它基本上使用名为 _getchar 的函数从 stdin 读取每个字符,将它们分配到一个数组中,如果 c =! EOF.

我只想知道下面代码中的语句 (*lineptr)[n_read] = '[=15=]'; 是做什么的:

#include <unistd.h>
#include <stdlib.h>

int _getchar(void)
{
    int rd;
    char buff[2];

    rd = read(STDIN_FILENO, buff, 1);

    if (rd == 0)
        return (EOF);
    if (rd == -1)
        exit(99);

    return (*buff);
}

ssize_t _getline(char **lineptr, size_t *n, FILE *stream)
{
    char *temp;
    const size_t n_alloc = 120;
    size_t n_read = 0;
    size_t n_realloc;
    int c;

    if (lineptr == NULL || n == NULL || stream == NULL)
        return (-1);

    if (*lineptr == NULL)
    {
        *lineptr = malloc(n_alloc);
        if (*lineptr == NULL)
            return (-1);
        *n = n_alloc;
    }
    while ((c = _getchar()) != EOF)
    {
        if (n_read >= *n)
        {
            n_realloc = *n + n_alloc;
            temp = realloc(*lineptr, n_realloc + 1);

            if (temp == NULL)
                return (-1);

            *lineptr = temp;
            *n = n_realloc;
        }
        n_read++;
        (*lineptr)[n_read - 1] = (char) c;

        if (c == '\n')
            break;

    }
    if (c == EOF)
        return (-1);
    (*lineptr)[n_read] = '[=11=]';
    return ((ssize_t) n_read);
}

char **lineptr 表示 lineptr 包含一个 char 指针的地址。

指针是一个包含地址的变量。因此,通过编写 *lineptr 您将获得该地址。

在你的情况下,**lineptr <=> *(*lineptr) <=> (*lineptr)[0]

编辑:顺便说一句,我没有回答问题...指令 (*lineptr)[n_read] = '[=17=]' 表示您正在结束字符串('[=18=]' 是 EOF(行尾)字符)。

它们看起来一样,但又不一样。

第一个:

int (*ptr)[something]; 

定义指向intsomething元素数组

的指针

后者

(*ptr1)[something]   //witohut type in front of it.

表示取消引用指针ptr1,然后取消引用先前取消引用的结果并添加something

它相当于

*((*ptr1) + something)