2013-07-19 7 views
4

emscripten을 사용하여 C 코드베이스를 작성하려고하는데 모든 I/O 호출에 대해 추상화 계층을 거칩니다. 내가 기대했던 일을하지, 그래서 나는 getline routine from here on StackOverflow 사용하여 간단한 테스트를 시도 :emscripten을 사용하여 표준 입력에서 읽기가 존재하지 않는 줄 바꿈을 얻습니다.

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

// From: https://stackoverflow.com/a/314422/211160 
char * getline_litb(void) { 
    char * line = malloc(100), * linep = line; 
    size_t lenmax = 100, len = lenmax; 
    int c; 

    if(line == NULL) 
     return NULL; 

    for(;;) { 
     c = fgetc(stdin); 
     if(c == EOF) 
      break; 

     if(--len == 0) { 
      len = lenmax; 
      char * linen = realloc(linep, lenmax *= 2); 

      if(linen == NULL) { 
       free(linep); 
       return NULL; 
      } 
      line = linen + (line - linep); 
      linep = linen; 
     } 

     if((*line++ = c) == '\n') 
      break; 
    } 
    *line = '\0'; 
    return linep; 
} 

int main() { 
    puts(getline_litb()); 
    return 0; 
} 

을 GCC에서 컴파일 또는이 잘 작동 연타. Enter 키를 누를 때까지 문자열을 읽고 그 문자열을 반환합니다. 나는 그것을 컴파일 할 때 :

emcc test.c -o test.bc 
emcc test.bc -o test.js 
node test.js 

그것은 거기에 줄 바꿈이의 입력 생각, 그래서 빈 줄을 인쇄하고 나에게 입력 할 수있는 기회를 제공하지 않습니다. 어떤 아이디어?

답변

1

나는 이와 비슷한 문제가 있었지만, 표준 버퍼를 적절하게 청소하지 않으면 나에게 일어난다. fgetc()를 한 번 또는 두 번 호출 한 다음 다시 실제 호출을 시도하십시오. 표준 입력 버퍼에 남을 수있는 일부 또는 모든 데이터를 지울 수 있습니다. 그것이 작동하지 않는다면 fgetc()에서 반환 된 직후에 화면에 printf() 'c'를 표시합니다.

+0

댓글 작성/upvoting에서 (오래 걸리는) 지연에 대해 매우 유감스럽게 생각합니다. 이 문제는 다른 사람들이 찾아 냈습니다 ... 그리고 어떤 진전이 있었기 때문에지도에이 Q & A를 올려서 체중을 측정 할 것입니다. 그래서 그들은 그들이 무엇을했는지에 관해 여기에서 차임 할 것입니다! – HostileFork