我们如何在Linux中读取char *

时间:2013-11-17 11:10:27

标签: c

我们如何在两个进程之间的管道中读取用户的数据类型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()时,我都会收到错误分段错误

2 个答案:

答案 0 :(得分:0)

您正在呼叫scanf()。您想告诉它将输入的数据放在某处。但是你没有给它这样的空间。

相反,你给它一个指针,它是未初始化的,因此指向一个未知的位置。这导致了段错误。

您可以使用inbuf代替。

但是你应该避免以这种方式使用scanf()。如果用户输入的数据超过缓冲区可容纳的数据,则会发生奇怪的事情。

相反,请使用fscanf()

答案 1 :(得分:0)

您需要将msg定义如下:

char msg[MSGSIZE];