使用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’添加到屏幕上.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
