C 具有存储在变量中的路径的fopen

C 具有存储在变量中的路径的fopen,c,fopen,C,Fopen,我已将路径保存在文本文件中,并希望将其读出。通过这些路径,我想读取新的文本文件,但如果我使用变量调用fopen(),程序只会崩溃。 我保存的路径是绝对路径。 我已经尝试过读取没有变量的文件,这也很有效 FILE *fp; FILE *variable; char file[256]; fp = fopen("C:\\Example\\Example.txt","r"); if(fp != NULL) { while(fgets(file, 256, fp) != NULL)

我已将路径保存在文本文件中,并希望将其读出。通过这些路径,我想读取新的文本文件,但如果我使用变量调用fopen(),程序只会崩溃。 我保存的路径是绝对路径。 我已经尝试过读取没有变量的文件,这也很有效

FILE *fp;
FILE *variable;
char file[256];

fp = fopen("C:\\Example\\Example.txt","r");

if(fp != NULL)
{
    while(fgets(file, 256, fp) != NULL)
    {
         variable = fopen(("%s", file), "r");
         // another while loop which reads out the content of the variablefile 
         fclose(variable);
    }
    fclose(fp);
}

代码中有两个问题。第一条是这条线

variable = fopen(("%s", file), "r");
我不知道你在哪里找到这个符号,但是fopen需要两个参数。从man:
文件*fopen(const char*路径名,const char*模式)
。基本上是两个字符串,一个用于路径,另一个用于打开模式,因此对fopen的正确调用应该是:

variable = fopen(file, "r");
此外,fgets将读取的任何换行符存储到缓冲区中。只需在打开文件之前删除此换行符:

char *newline = strchr(Name, '\n');
if (newline)
    /*if a newline is found, we remove it*/
    *pos = '\0';
else
    /*error: input too long for buffer */

您的代码段不完整。什么是fopen((“%s”…)?当我搜索如何将变量传递给fopen()时,我在互联网上的某个地方发现了这个问题。为什么不使用variable=fopen(文件,“r”);?您可能还想删除调用中留下的换行符。在
variable=fopen(文件,“r”);
之后添加类似
if(变量==NULL){perror的内容(“fopen”);fprintf(stderr,“file=\%s\“\n”,file);}
查看有什么问题。(可能是尾随换行符)感谢您的回复。我已经解决了这个问题。我使用了for循环并检查了字符[]是否有“\n”并将其替换为“\0”这是大致相同的解决方案。考虑把它标记为被接受的答案,如果它解决了你的问题。