Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-read()和write()_C - Fatal编程技术网

C-read()和write()

C-read()和write(),c,C,我在用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; } 如果我到终点站做$ex10

我在用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;
}
如果我到终点站做$ex10,就这样做 当我写东西时,它应该把我写的东西和“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;
}

您看过
读取
写入
的文档了吗?它们实际上不是用于此的正确函数。您可能需要
fgets
printf
实际读取了多少字节
read()
需要一个以null结尾的字符串。@Kevin,从一般意义上说,是的,更高级别的函数可以帮助您处理OP缺少的一些细节。但是,当你有一个明确目的是让你练习使用低级函数的练习时,它们实际上不是一个选项。strlen(buf)也会失败。需要为sizeof(buf)