C 如何在循环中写入时动态更改文件名

C 如何在循环中写入时动态更改文件名,c,C,我想在20个循环中打开文件。每次文件夹的名称改变。像这个变量1,变量2,变量3……变量20,我在这里发现了同样的问题,但它对我没有帮助 以下是我尝试过的: int l=1; while(l<20){ char filename[10]; sprintf (filename, "variables%d", l);

我想在20个循环中打开文件。每次文件夹的名称改变。像这个变量1,变量2,变量3……变量20,我在这里发现了同样的问题,但它对我没有帮助

以下是我尝试过的:

 int l=1;
 while(l<20){                                                                            
    char filename[10];
    sprintf (filename, "variables%d", l);
                     OR
    scanf("%s", filename);                   

    FILE * fp; 
    if ((fp = fopen (filename,"rb")) == NULL){ 
    printf("Failed to Open File variables%d\n",l);}  
    ...........  Reading Data........
    fclose (fp);
    l++;
 }
intl=1;

虽然(l您的
文件名
缓冲区太短-“variables1”需要10个字符加上一个
'\0'
终止符,因此此缓冲区至少需要11个字符,索引>9时需要更多字符,否则将导致缓冲区溢出和未定义的行为。更改:

     char filename[10];
致:

致:


你从不增加你的计数器。 我还建议您使用这样的for循环

for(int i = 1; i < 20; i++){
    // Your code
}
for(int i=1;i<20;i++){
//你的代码
}

为什么C++标签是这样的,看起来像香草C和C + C++是不同的语言。如果你写C代码,C++的答案可能就不起作用了,如果你在写C++代码,那么为什么你不使用<代码> STD::String 和 IoSoos?>代码>文件名< /C> >可能被堆栈上的其他变量损坏,因为你超出了它的界限。你可以通过使用调试器或在
printf
调用中简单地打印
filename
来检查这一点(而不是在那里重新创建)。我已经这样做了。我使用printf打印了它,它匹配。variables1.bin伪代码说“…读取数据…”啊,是的-标题是“写入”尽管…或
MAX_PATH
取决于操作系统/编译器。@KhouriGiordano:
MAX_PATH
是Windows的一个讨厌的东西-
PATH_MAX
是可移植的。建议首先放置缓冲区溢出点,因为这很可能是实际原因。请求读访问与写访问不是打开失败的原因。反复
fopen
ing同一个文件是完全合法的。虽然OP确实需要修复他们的循环,但这不是他们遇到的错误的原因。我只是忘了在这里写。我的代码中有它。而且不匹配。即使是1个循环也会出错。这不是循环问题。。
      if ((fp = fopen (filename,"rb")) == NULL){ 
      if ((fp = fopen (filename,"wb")) == NULL){ 
for(int i = 1; i < 20; i++){
    // Your code
}