gpt4 book ai didi

C - 读()和写()

转载 作者:行者123 更新时间:2023-11-30 16:45:24 28 4
gpt4 key购买 nike

我正在使用 read() 和 write() 函数来处理我的类,并且我正在尝试使用一个函数来写入它所读取的内容以及我作为参数给出的前面的内容。

例如,我想给出 10 作为我的程序的参数

int main(int argc, char *argv[]){
char buf[512];
while(read(0,buf,sizeof(buf)) > 0){
strcat(buf,argv[1]);
write(1,buf,sizeof(buf));
}

return 0;
}

这样如果我去终端并执行 $ ./ex 10当我写东西时,它应该粘贴我写的内容和“10”在前面

我做错了什么?

最佳答案

如果您需要使用 read() 和 write(),您应该了解这些系统调用的工作原理。

read(0,buf,sizeof(buf)

在这种情况下,read() 将从 std 输入写入缓冲区,最多 512 个字符。问题是 read() 没有将 '\0' 放在缓冲区的末尾。您有多种方法可以做到这一点。一种是使用 bzero() 函数,如下所示:

bzero(buf, siezof(buf);

您还可以手动将字符“\0”放入数组中。另一个问题是你的 strcat();如果用户输入超过 512 个字符,您的缓冲区将会溢出,请小心。

以下代码应该是了解您需要做什么的良好开端:

int main(int argc, char *argv[]){
char buf[512];

bzero(buf, 512);
while(read(0,buf,sizeof(buf)) > 0){
strcat(buf,argv[1]);
write(1,buf,sizeof(buf));
bzero(buf, 512);
}

return 0;
}

关于C - 读()和写(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44116042/

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