我正在使用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”
我做错了什么?
答案 0 :(得分:0)
如果你需要使用read()和write(),你应该学习这些系统调用是如何工作的。
read(0,buf,sizeof(buf)
在这种情况下,read()将从std输入写入,缓冲区最多512个字符。 问题是read()没有将'\ 0'放在缓冲区的末尾。 你有几种方法可以做到这一点。 一种是使用bzero()函数,如:
bzero(buf, siezof(buf);
您也可以手动将char'\ 0'放在数组中。 另一个问题是你的strcat(); 如果用户输入超过512个char,则会溢出缓冲区,请小心。
以下代码应该是了解您需要做什么的良好开端:
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;
}