C分段故障错误消息

时间:2017-04-21 12:52:57

标签: c

我是C编程的新手,我正在创建一个客户端 - 服务器程序。客户端基本上调用服务器上的函数,结果基本上返回给客户端。但是,在尝试将指定目录的内容发送到客户端时,我一直收到分段错误。

它列出了服务器目录中的文件名,但它们不会返回给客户端。列出文件名后会出现错误并且程序崩溃: Segmentation Fault

代码:

void three()
{
DIR *mydir;
    if ((mydir = opendir("transfer/")) == NULL) {
    perror("error");
    exit(EXIT_FAILURE);
    }

    struct dirent *entry = NULL;

    // returns NULL when dir contents all processed
    while ((entry = readdir(mydir)) != NULL) 
    printf("%s\n", entry->d_name);
    strcpy((char *) send_buff, entry->d_name);
    write(connfd, send_buff, strlen((char *) send_buff) + 1);
}

有没有办法解决这个问题? 提前谢谢!

2 个答案:

答案 0 :(得分:3)

看起来你错过了这段代码周围的花括号,因为它目前只调用printf。只有在循环结束后才会调用strcpywrite,此时entry的内容无效。

while ((entry = readdir(mydir)) != NULL)
  {
  printf("%s\n", entry->d_name);
  strcpy((char *) send_buff, entry->d_name);
  write(connfd, send_buff, strlen((char *) send_buff) + 1);
  }

答案 1 :(得分:1)

至少你必须在while语句

之后用括号括起来
// returns NULL when dir contents all processed
while ((entry = readdir(mydir)) != NULL)
{ 
    printf("%s\n", entry->d_name);
    strcpy((char *) send_buff, entry->d_name);
    write(connfd, send_buff, strlen((char *) send_buff) + 1);
}

否则此声明

    strcpy((char *) send_buff, entry->d_name);
entry等于NULL时执行