void download(char *file)
{
int size = getsize(file);
printf("Got size %d\n", size);
sprintf(buff, "GET %s\n", file);
send(sockfd, buff, strlen(buff), 0);
rsize = recv(sockfd, buff, 1000, 0);
sscanf(buff, "%d", &resultcode);
printf("%s", buff);
if (strcmp(buff, "+OK\n") != 0)
{
printf("download failed\n");
}
FILE *dlfile = NULL;
if ((dlfile = fopen(file, "r")) != NULL)
{
dlfile = fopen(file, "w");
do
{
rsize = recv(sockfd, buff, 1000, 0);
for (int i = 0; i < rsize; i++)
{
fprintf(dlfile, "%c", buff[i]);
}
size = size - rsize;
} while (size != 0);
}
fclose(dlfile);
}
我试图使下载功能打印输出的文件用户的内容,然后将其保存到当前目录。我做了一个调试行printf("%s", buff);
,它打印出+OK\n(filename)
。它应该打印出+OK\n
。它还打印出download failed
,然后出现segmentation fault
错误。我错过了什么?缓冲区没有正确读取字符串
你正在比较“+ OK \ n(文件名)”和“+ OK \ n”吗?他们不平等。你在找'strstr'吗? –
当你阅读它时,你假设所有坐在那个插座上的都是“确定\ n”。当他们把答复提出来时,发件人正在填塞它。对于这个世界里的所有人来说都是好的,**检查你的函数调用返回值。**。面对[亨利斯宾塞的C程序员第六诫命](http://www.seebs.net/c/10com.html) – WhozCraig