私はこのコードサンプルを持っていて、一般的にそのロジックを理解していますが、いくつかの詳細にはまっています。Malloc in C - 戻り値
#define LSH_RL_BUFSIZE 1024
char *lsh_read_line(void) {
int bufsize = LSH_RL_BUFSIZE;
int position = 0;
char *buffer = malloc(sizeof(char) * bufsize);
int c;
if (!buffer) {
fprintf(stderr, "lsh: allocation error\n");
exit(EXIT_FAILURE);
}
while (1) {
// Read a character
c = getchar();
// If we hit EOF, replace it with a null character and return.
if (c == EOF || c == '\n') {
buffer[position] = '\0';
return buffer;
} else {
buffer[position] = c;
}
position++;
// If we have exceeded the buffer, reallocate.
if (position >= bufsize) {
bufsize += LSH_RL_BUFSIZE;
buffer = realloc(buffer, bufsize);
if (!buffer) {
fprintf(stderr, "lsh: allocation error\n");
exit(EXIT_FAILURE);
}
}
}
}
私は2つのことを理解できません。まず、この行は正確には何ですか?
char *buffer = malloc(sizeof(char) * bufsize)
第2に、次の行はどのように機能しますか?どのようにポインタを返すことができますか?
return buffer;
を参照してください。ちょうどあなたは整数を返すことができる方法を使用しています。あなたがそれをすることができないと思う何らかの理由がありますか? – MikeCAT
['malloc'](https://linux.die.net/man/3/malloc)は、パラメータ(この場合は' bufsize')で指定されたメモリのチャンクをOSに要求します。あなたは関数の他の値と同じようにポインタを返します。その詳細は[ABI](https://en.wikipedia.org/wiki/Application_binary_interface)に依存します – yano
私はそれが私たちに実用的なものを与えてくれますこの例では? – AdamSMith