我是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);
}
有没有办法解决这个问题? 提前谢谢!
答案 0 :(得分:3)
看起来你错过了这段代码周围的花括号,因为它目前只调用printf
。只有在循环结束后才会调用strcpy
和write
,此时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
时执行。