簡體   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