我们如何在两个进程之间的管道中读取用户的数据类型char*
?
这是我的代码:
#include<stdio.h>
#include<unistd.h>
#define MSGSIZE 120
int main (
{
char *msg ;
char inbuff[MSGSIZE];
int p[2];
int ret;
pipe(p);
ret = fork();
if(ret != 0){
close(p[0]);
printf("Please Enter the msg\n");
scanf("%s",msg);
printf("I am the parent sending a msg %s\n",msg);
write(p[1],msg,MSGSIZE);
}
else
{
sleep(10);
close(p[1]);
read(p[0],inbuff,MSGSIZE);
printf("\nI am the child with msg %s",inbuff);
}
return 0;
}
我的问题是,每当编译器进入scanf()
时,我都会收到错误分段错误
答案 0 :(得分:0)
您正在呼叫scanf()
。您想告诉它将输入的数据放在某处。但是你没有给它这样的空间。
相反,你给它一个指针,它是未初始化的,因此指向一个未知的位置。这导致了段错误。
您可以使用inbuf
代替。
但是你应该避免以这种方式使用scanf()
。如果用户输入的数据超过缓冲区可容纳的数据,则会发生奇怪的事情。
相反,请使用fscanf()
。
答案 1 :(得分:0)
您需要将msg定义如下:
char msg[MSGSIZE];