在c中打开编号的文件

时间:2014-03-21 18:49:09

标签: c file char fopen

我遇到的问题只是打开一个基于输入的数字文件。 示例包括:

int main(int argc, char *argv[])
{
  int argument = atoi(argv[1]);
  FILE *fp;
  fp = fopen("/folder/item'argument'file", "r");
  //do stuff to the file
}

传递4的示例将打开名为" item4file"的文件。使用

我该如何解决这个问题?

真诚地感谢任何和所有帮助

5 个答案:

答案 0 :(得分:6)

int argument = atoi(argv[1]);  
FILE *fp;
char address[50]; // choose the size that suits your needs
sprintf (address, "/folder/item%dfile", argument);
fp = fopen(address, "r");

正如您可以阅读from the reference一样,终止空字符会自动附加到字符串中。

但是,如果你想避免缓冲区溢出,你应该使用snprintf(与上面相同的参考页面中显示),声明缓冲区的最大大小,以便输入不会溢出它。

int argument = atoi(argv[1]);  
FILE *fp;
char address[50]; // choose the size that suits your needs
snprintf (address, 49, "/folder/item%dfile", argument); // 49 since we need one index for our null terminating character

答案 1 :(得分:1)

使用sprintf()作为

char filename[50]
strcpy(filename,"/folder/item");
sprintf(str,"%s",argv[1]);
strcat(filename,str);
strcat(filename,"file");
fp=fopen(filename,"r");

答案 2 :(得分:1)

使用snprintf将整数转换为适合在文件路径名中使用的字符串。

#include <stdio.h>
#include <limits.h>

int main(int argc, char *argv[])
{
  int argument = atoi(argv[1]);
  char pathname[PATH_MAX];
  FILE *fp;

  snprintf(pathname, PATH_MAX, "/folder/item%dfile", argument);
  fp = fopen(pathname, "r");
  if (fp != NULL) {
    //do stuff to the file
  }
}

答案 3 :(得分:0)

看看http://www.cplusplus.com/reference/cstdio/sprintf/。它允许您打印到字符串缓冲区。

答案 4 :(得分:0)

您可以像这样使用

char filename[30];
sprintf(filename, "/folder/item%dfile", argv[1]);