繁体   English   中英

C中的可变替代

[英]Variable Substitution in C

我想打开一个文件。 很容易。 使用fopen()。 但是,要打开的文件取决于用户输入。 我对Korn Shell脚本有点精通,使用变量替换很容易做到:$(var)。 我无法在C中找出正确的格式。有人可以给我一些见解吗? 我的代码 -

 #include <stdlib.h>
 #include <stdio.h>

 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/***<fileA>***", "r+");

 .......................................^ What goes here?

我不确定如何在fopen字符串中包含用户输入。

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");

您必须手动连接两个字符串。 像这样的东西

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+");

此外,您在mainstatsA的定义会掩盖文件范围内的定义。 你可能想给这些不同的名字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM