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
'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 |