gpt4 book ai didi

c - c 中的 read() 标准输入?

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:13 24 4
gpt4 key购买 nike

我有一个涉及 read() 命令的小问题。

我对 C 语言真的生疏了,不幸的是,我目前的任务是用 C 语言编程。我们需要使用 read() 而不是 fgets 等读取标准输入。

所以我有一个简单的 while 循环:

int n, i;
char buffer[257], *input;

while((n=read(fileno(stdin), buffer, 256)) > 0)
{
buffer[n] ='\0';
if(buffer[n] = '\n') break;
write(input, buffer, strlen(buffer));
}

所以我不确定如何让这个循环在按下回车键(行尾)时停止,所以这就是我有中断代码的原因,尽管我不知道这样做是否正确。

我试图完成的整个目标是将来自标准输入的输入放入指针“输入”

(我真的不擅长理解指针,所以请耐心等待 :))

我的问题是当我按 enter 键时出现段错误。我希望我可以使用 fgets,因为这样所有这些都可以通过简单的方式解决

input = fgets(buffer, 256, stdin);

该死的作业:(无论如何,如果你们中的任何一个能指出我正确的方向,我将非常感激。谢谢!

最佳答案

你的做法全错了。首先,write是一个系统调用,用于写入打开的文件描述符。你的input不是那样的——一个文件描述符是通过调用 open 获得的。首先是系统调用,或者引用一个始终打开的文件,例如stdin , stdoutstderr .更不用说文件描述符是 int在 Linux 上。

此外,您应该记住,您在 stdin 上输入的假设以换行符结尾不一定总是正确的。您的程序可能会在标准输入上收到一些不包含任何换行符的内容,例如某些文件的内容(重定向到 stdin ),或者来自键盘的输入可能只是以 Ctrl-D 结尾(EOF) 而不是“返回”键。

最重要的是,未初始化的指针不指向任何有效内存char *input的声明不授予您任何写入/读取 input 引用的内存的权利|除非您分配一些该指针首先指向的内存。

在 C 中复制字符串是通过使用 <string.h> 中声明的函数实现的.它们对 C 字符串进行操作,例如以 \0 结尾的字符序列.在这种情况下,read()不会通过 \0 终止其输出,在这种情况下,您需要使用 memcpy代替功能。为什么不尝试直接读入 input , 尽管?读到 buffer 意义不大首先,只是稍后将数据复制到另一 block 内存。

此外,read 的规范声明它从文件描述符中读取最多 count 个字节。这意味着如果你的 buffer声明为 char[257] , 那么你应该调用 read(stdin,buffer,257) ,而不是 256。将缓冲区简单地声明为 256 个元素的数组可能也更合适。

我希望我已经为你整理了一些东西。

关于c - c 中的 read() 标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com