Ключевое слово static
поддерживает указатель живым до тех пор, пока программа не завершится, но выделяется ли память для указателя buffer
free'd автоматически после завершения процесса?или программист должен это делать?
В следующем примере мы не знаем, сколько раз будет вызвана функция, и мы можем освободить выделенную память, только если мы ничего не прочиталина текущий вызов функции.В противном случае память не может быть освобождена, поскольку нам потребуется использовать байты, которые мы только что прочитали при следующем вызове.
Функция :
char *readStdin(void) {
static char *buffer = NULL;
ssize_t ret;
if (buffer != NULL) {
// DO SOMETHING WITH PREVIOUSLY READ BYTES
}
/* Allocate and NULL-terminate a Buffer */
buffer = malloc(BUFSIZ);
if (buffer == NULL)
return (NULL);
buffer[BUFSIZ] = '\0';
/* Read from Standard Input at most 'BUFSIZ' characters*/
ret = read(0, buffer, BUFSIZ);
/* Free Buffer if no Input Read */
if (ret <= 0) {
free(buffer);
buffer = NULL;
}
/* Return the read Input */
return (buffer);
}
Программа :
int main(void) {
/* Print the Read Bytes */
printf("%s", readStdin());
printf("%s", readStdin());
printf("%s", readStdin());
...
}