加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用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’添加到屏幕上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读