C中的可变替换
我想打开一个文件。 很容易。 使用fopen()。 但是,要打开的文件取决于用户输入。 我有点精通Korn Shell脚本,这很容易使用变量替换:$(var)。 我无法在C中找出正确的格式。有人可以给我一些见解吗? 我的代码 –
#include #include char statsA[100]; char fileA[50]; int main (void) { printf("Enter file to open\n"); gets(fileA); FILE *statsA; statsA = fopen("c:/Users/SeanA/C/******", "r+"); .......................................^ What goes here?
我不确定如何在fopen字符串中包含用户输入。
您必须手动连接两个字符串。 像这样的东西
char* folder = "c:/Users/SeanA/C/"; char* path = malloc(strlen(fileA) + strlen(folder) + 1); path = strcpy(folder); path = strcat(fileA); FILE *statsA = fopen(path, "r+"); free(path);//Always free your memory
这就是sprintf
的用途。 它的工作方式与printf
类似,只是它的输出变为字符串而不是stdout
。
char filename[100]; sprintf(filename, "c:/Users/SeanA/C/%s", fileA); statsA = fopen(filename, "r+");
此外,您在main
的statsA
的定义会屏蔽文件范围内的定义。 你可能想给这些不同的名字。
执行scanf
以从用户处获取文件。
创建一个char数组来保存文件名。
char filename[15];
现在请求文件名:
printf("What is the name of the file?\n");
scanf("%s", &filename);
注意:包括FULL文件名。 所以如果我有一个名为filename
的文本doc用户需要输入filename.txt
现在你有了文件名,你可以声明一个文件指针
FILE * fp;
fp = fopen(filename, "r");
现在你应该能够扫描你的文件了!
fscanf(fp, "%d", &value);
编辑:我没有注意到你想要与文件路径串联连接。
由于您知道预定义路径,因此可以创建另一个包含该字符串路径的char数组
char fullPath[100];
char path[75] = "c:/Users/SeanA/C/";
现在你可以使用strcat
将它们组合在一起!
strcat(fullPath, path);
strcat(fullPath, filename);
现在你做fopen(fullPath, "r");