gpt4 book ai didi

c - read() 的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 05:50:07 25 4
gpt4 key购买 nike

我发现了 read() 函数,但我并没有完全理解。这是我的代码:

#include <unistd.h>
#include <stdio.h>

int main(void)
{
char array[10];
int ret;

printf("read : ");
fflush(stdout);

array[sizeof(array) - 1] = '\0';
ret = read(STDIN_FILENO, array, sizeof(array) - 1);

printf("array = %s\n", array);
printf("characters read = %d\n", ret);

//getchar();

return (0);
}

下面是运行程序的例子:

$> ./a.out
read : hi guys how are you
array = hi guys h
characters read = 9
$> ow are you
zsh: command not found: ow
$>

为什么在程序结束后启动shell命令?我注意到,如果我取消注释 getchar() 行,这种奇怪的行为就会消失。如果有人有想法,我想了解发生了什么:)

最佳答案

您调用 read正在读入您键入内容的前 9 个字符。任何其他内容都将留在输入缓冲区中,以便当您程序退出时,您的 shell 将改为读取它。

您应该检查 read 的返回值所以您知道已读取了多少,因为它不能保证它会是您要求的数量,并且返回的值用于指示错误。

读入的字符串也不会以 null 结尾,因此您还应该使用返回值(如果为正)放入 NUL 字符,以便您的字符串有效。

如果您想阅读整行,则需要放入一个循环并确定何时有行尾字符(很可能是 '\n' )。

关于c - read() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44164306/

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