如果 (* 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];
定义指向int
something
元素数组
的指针
后者
(*ptr1)[something] //witohut type in front of it.
表示取消引用指针ptr1
,然后取消引用先前取消引用的结果并添加something
。
它相当于
*((*ptr1) + something)
下面的代码按以下方式工作:它基本上使用名为 _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];
定义指向int
something
元素数组
后者
(*ptr1)[something] //witohut type in front of it.
表示取消引用指针ptr1
,然后取消引用先前取消引用的结果并添加something
。
它相当于
*((*ptr1) + something)