C-如何使用read()从stdin读取输入直到换行符?

时间:2018-02-16 01:25:03

标签: c

基本上我想使用read()函数从STDIN中读入一个类型化的消息,但是我想通过只键入enter键而不是使用CTRL + D来退出消息。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

有时我不知道老师在想什么。而不是教如何 正确使用正确的功能,它们可以为您提供无法完成的任务 使用变量,或者你不能返回指针而你甚至无法使用 功能。对我来说就像木匠大师告诉年轻人一样 学徒钉这个钉子,但不要用你的锤子,用你的螺丝刀 代替。够了我的咆哮......

这里的问题是你想要阅读有意义的内容(newline for 例如)一个函数只读取一个字节块而不关心 字节的含义。如果换行符位于块的中间位置 读,然后你读得太多了。最好的方法是在a处读取一个字节 时间并检查是否是换行符。

int get_from_user(char *buffer, size_t size)
{
    size_t cnt = 0;
    char c;

    if(buffer == NULL || size == 0)
        return 0;

    while(read(STDIN_FILENO, &c, 1) == 1 && cnt < size - 1)
    {
        if(c == '\n')
        {
            buffer[cnt] = 0;
            return 1;
        }

        buffer[cnt++] = c;
    }

    buffer[cnt] = 0; // making sure it's 0-terminated
    return 1;
}

当你想阅读时:

char line[100];
get_from_user(line, sizeof line);