发生错误后,我自然调用perror()。但是当我这样做的时候,我会有一个分割错误,或者我不知道发生了什么。

  int fd;
  if((fd = open(FILENAME, O_RDONLY)) == -1) {
    perror("fbi");
    exit(1);
  }

  for(;;) {

    readed = read(fd, buffer, BUFSIZE);

    if(readed == 0)
      break;

    if(readed == -1) {
      perror("fbi"); // <- here's the error
      exit(1);
    }

怎么解决这个问题?
更新:
printf("%d\n", errno); // given 9

更新2:
似乎与printf("error: %s\n", strerror(errno));函数中传递的缓冲区大小有关系。如果recv()BUFSIZE,则给出上述错误。但如果1是例如,BUFSIZE没有错误。有人能解释这种行为吗?

最佳答案

从这一片段中不可能知道到底出了什么问题。但总的来说,问题的答案是“为什么在调用[Rock Solid C library func here]时我要segfault?”通常是:你的堆栈是油炸的。读到的,当然是首要嫌疑犯。

关于c - perror()给出段。故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12573266/

10-10 02:26