My Computer Programs

getline, readline

steloflute 2014. 4. 9. 23:47

Read an unknown-length string.

 

C:

http://stackoverflow.com/a/23404687/1941928

#include <stdio.h>
#include <stdlib.h>

char *getline(FILE *fp, size_t size) {
 if (size <= 0) size = 1;
 //The size is extended by the input with the value of the provisional
    char *str;
    int ch;
    size_t len = 0;
    str = realloc(NULL, sizeof(char)*size); //size is start size
    if (!str) return str;
    while (EOF != (ch = fgetc(fp)) && ch != '\n') {
        str[len++] = ch;
        if(len == size){
            str = realloc(str, sizeof(char)*(size*=2));
            if (!str) return str;
        }
    }
    str[len++]='\0';

    return realloc(str, sizeof(char)*len);
}

int main(void){
    char *m;

    printf("input string : ");
    m = getline(stdin, 10);
    printf("%s\n", m);

    free(m);
    return 0;
}


char *readline(char *prompt) {
  size_t size = 80;
  char *str = malloc(sizeof(char) * size);
  int c;
  size_t len = 0;
  printf(prompt);
  while (EOF != (c = getchar()) && c != '\r' && c != '\n') {
    str[len++] = c;
    if(len == size) str = realloc(str, sizeof(char) * (size *= 2));
  }
  str[len++]='\0';
  return realloc(str, sizeof(char) * len);
}

 

linked list version:

char *readline() {
  struct char_link *cl_head = NULL;
  struct char_link *cl_last = NULL;
  struct char_link *t;
  size_t len = 0;
  while (1) {
    int c = getchar();
    if (c == EOF || c == '\r' || c == '\n') break;
    t = malloc(sizeof(struct char_link));
    t->v = c;
    t->next = NULL;
    if (cl_head == NULL) {
      cl_head = t;
      cl_last = t;
    }
    else {
      cl_last->next = t;
      cl_last = t;
    }
    len++;
  }
  char *s = malloc((len + 1) * sizeof(char));
  long i = 0;
  t = cl_head;
  while (t) {
    struct char_link *tn = t->next;
    s[i] = t->v;
    free(t);
    t = tn;
    i++;
  }
  s[i] = 0;
  return s;
}

 

Reference

http://stackoverflow.com/questions/16870485/how-can-i-read-a-an-input-string-of-unknown-length/16871702#16871702

 

'My Computer Programs' 카테고리의 다른 글

The L++ Programming Language  (0) 2014.05.08
L++ 0.1  (0) 2014.05.08
주민등록번호 검증기  (0) 2014.04.08
Korea stock ticker  (0) 2014.03.10
Halfwidth and fullwidth conversion program (반각 전각 변환)  (1) 2014.03.07