如何在C中为文件名添加递增数字?

0 投票
5 回答
975 浏览
提问于 2025-04-15 23:47

我遇到了一点小问题。我需要在一个小程序里对很多文件进行一些简单的操作。到目前为止,我决定在一个循环里处理这些文件,只需更改文件名后面的数字。这些文件的命名格式是TFxx.txt,其中xx是从1到80的递增数字。那么,我该如何在一个循环中一个接一个地打开这些文件呢?我试过这样做:

for(i=1; i<=80; i++) {
   char name[8] = "TF"+i+".txt";
   FILE = open(name, r);
   /* Do something */
  }

如你所见,第二行在Python中可以正常工作,但在C语言中却不行。我尝试用C语言做类似的编号,但还没找到合适的方法。格式不一定要和第二行一样,但我希望能得到一些建议,告诉我该如何解决这个问题。我只需要能够打开多个文件,并对它们进行相同的操作。

5 个回答

1

假设你写的只是伪代码;否则问题就不仅仅是这样了。

char name[8] = "TF"+i+".txt";

你在用加法来连接字符串,还把整数转换成字符串……在某些语言中这样做是合理的,但在C语言中,+ 只是用来做数字相加的……另外,FILE = open... 这个写法也有问题……

char name[BUFLEN];
sprintf(name, "TF%d.txt", i);

你可以用 snprintf(name, BUFLEN, "TF%d.txt") 来填充你的文件名,这样会更好,但这个是C99的写法,而前面的那个是C89的写法。

要打开文件,可以用类似 FILE *fh = fopen(name, "r") 这样的代码来读取文件。

1

除了Daniels的回答,我想补充一下,char name[8]这个数组应该稍微大一点,以便能放下结束符'\0',比如可以改成char name[20];

另外,FILE = open(name,r);这行代码应该改成FILE * fp = fopen(name,"r");

5

你可以这样使用sprintf:

for(i=0; i<=80; i++) {
   char name[32];
   memset(name, 0, sizeof(name));
   FILE *fp;
   sprintf(name, "TF%d.txt", i);
   fp = fopen(name, "r");
   /* Do something */
  }

撰写回答