C-read()和write()
我在用read()和write()函数处理我的类,我试图创建一个函数,该函数写它所读的内容,以及前面作为参数给出的内容 例如,我想给10作为我的程序的参数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
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)