我遇到的问题只是打开一个基于输入的数字文件。 示例包括:
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"的文件。使用
我该如何解决这个问题?
真诚地感谢任何和所有帮助
答案 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]);