使用emscripten从标准输入读取会得到不存在的换行符
发布时间:2020-12-16 07:05:13 所属栏目:百科 来源:网络整理
导读:我正在尝试使用emscripten构建一个C代码库,它通过所有I / O调用的抽象层.它不是我所期望的,所以我尝试使用 getline routine from here on StackOverflow进行更简单的测试: #include stdio.h#include stdlib.h// From: https://stackoverflow.com/a/314422/2
我正在尝试使用emscripten构建一个C代码库,它通过所有I / O调用的抽象层.它不是我所期望的,所以我尝试使用
getline routine from here on StackOverflow进行更简单的测试:
#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 = ' '; return linep; } int main() { puts(getline_litb()); return 0; } 在gcc或clang下编译,这很好用.它会读入一个字符串,直到您按Enter键并返回该字符串.但是当我编译它时: emcc test.c -o test.bc emcc test.bc -o test.js node test.js 它认为输入了一个换行符,因此它打印一个空行并且没有给我输入的机会.有任何想法吗? 解决方法
之前我遇到过类似的问题,但在我没有正确清理stdin缓冲区之后发生了这件事.尝试一次或两次调用fgetc(),然后再次调用它.这可以清除可能留在标准输入缓冲区中的部分或全部数据.如果那不起作用,那么我会从fgetc()返回后立即将printf()’c’添加到屏幕上.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |