- 论坛徽章:
- 5
|
回复 86# pmerofc
这里有个非常简单的readline实现,应该很容易解释吧?- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define RL_BLOCKSIZE 80
- char *readline(const char *prompt) {
- char *buff = (char*)malloc(RL_BLOCKSIZE);
- size_t capacity = RL_BLOCKSIZE;
- size_t len = 0;
- printf("%s", prompt != NULL ? prompt : "> ");
- while (fgets(buff + len, capacity - len, stdin) != NULL) {
- char *newbuff;
- if ((len += strlen(buff + len)) != capacity - 1) {
- if (buff[len - 1] == '\n')
- buff[len - 1] = '\0';
- return buff;
- }
- if ((newbuff = realloc(buff, capacity*=2)) == NULL)
- break;
- buff = newbuff;
- }
- free(buff);
- return NULL;
- }
- /* usage */
- int main(void)
- {
- char *s;
- while ((s = readline(NULL)) != NULL) {
- printf("s = %s\n", s);
- free(s);
- }
- return 0;
- }
复制代码 |
|