【发布时间】:2017-03-23 22:06:24
【问题描述】:
我有这个代码示例,并且大致了解它的逻辑,但我陷入了一些细节。
#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);
}
}
}
}
我无法理解两件事:首先,这条线到底是做什么的?
char *buffer = malloc(sizeof(char) * bufsize)
其次,下一行是如何工作的?指针是怎么返回的?
return buffer;
【问题讨论】:
-
"我们如何返回一个指针?"只需使用可以返回整数的方式。你有什么理由认为你不能这样做?
-
我的意思是,在这个例子中它给了我们什么实用性?
-
return buffer;返回指向malloced 的内存的指针 -
请注意,
old_ptr = realloc(old_ptr, new_size)是一种反模式。如果内存分配失败,old_ptr中有一个空指针,但它曾经(但不再)指向的内存仍分配给程序。你可以使用new_ptr = realloc(old_ptr, new_size); if (new_ptr == 0) { …handle error… } old_ptr = new_ptr;来防止内存泄漏。
标签: c function pointers return