C fopen filename参数作为动态变量

C fopen filename参数作为动态变量,c,ftp,C,Ftp,我想将函数fopen的filename参数作为一个动态变量,用于接收ftp服务器的ftp客户端输入。我在这个论坛和谷歌上尝试了很多不同的方法,但fopen仍然无法识别“文件名” else if (strncmp(client->input, "retr", 4) == 0) { char fname[1024]; // COMMAND LINE: retr filePATHNAME thats why +5

我想将函数fopen的filename参数作为一个动态变量,用于接收ftp服务器的ftp客户端输入。我在这个论坛和谷歌上尝试了很多不同的方法,但fopen仍然无法识别“文件名”

else if (strncmp(client->input, "retr", 4) == 0) {

            char fname[1024];  
            // COMMAND LINE: retr filePATHNAME thats why +5       
            strcpy(fname, client->input+5); 

        if(fopen(fname, "r") != NULL) {
        ...
如果我把fopen(“/pub/test.txt”,“r”)放进去,它会工作,所以它与空格、引号或类型有关

但是,如果我尝试在客户端命令行上使用retr/pub/test.txt或甚至retr/pub/test.txt“fopen不起作用,也不会打开文件

我在这件事上耽搁了很长时间,非常感谢您的帮助

谢谢,我找到了答案

感谢@user3386109的提示

我基本上必须清除所有的空格,输入新的行

strtok(client->input+5,"\r\n\t");

请尝试提供。我建议您记录服务器尝试打开的文件名。可能不是你想的那样。一定要使用显示尾随空格/换行符的日志格式,因为这些附加字符的存在是更可能出现的问题之一。@JohnBollinger我对C和所有这些东西都不熟悉,所以我不太确定如何记录它。我已经试着打印fname提供的内容,它只是精确地打印我输入的内容。此外,如果您在一个有fname的平台上,您应该检查内存问题,如未初始化的字节或无效的读写。@pkmangg,最简单的说,记录文件名可能意味着以合适的格式将其打印到stdout。