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