2013-11-26 54 views
0

快速的問題,因爲我只能設法在googlemobil上找到有關C++的答案:有什麼方法可以打開和編輯C文件中的文件,其中有一個變量名?打開並編輯具有變量名稱的外部文件C

讓我們更清楚一點:我有一個提示,它檢查用戶是否提供文件名。如果沒有輸入文件名,程序會自動打開我在同一目錄下創建的client.conf文件;現在這是if-else語句的簡單部分。

但是,如果給出了一個名字,我該如何讓我的程序在同一個目錄下創建一個文件givenInput.conf,並向它發送數據?我認爲r/w交互將與if語句的第一種情況相同,使用fopen(),但fopen()用作第一個參數const char * restrict filename,並且我正在嘗試爲不是常量的字符...

在C++中,有一種方法可以通過創建一個單獨的(空)數組來粘貼輸入,然後將字符串後綴添加到它;同時,它採用了C++特定功能(誰的名字我忘了,對不起^^)來分析變量名....

任何想法如何在普通,普通good'olÇ管理呢?我是C編程語言的新手,對於新手請溫柔一些;)

+0

您可能想了解有關['snprintf'](http://en.cppreference.com/w/c/io/fprintf)(稱爲['_snprintf'](http://msdn.microsoft.com Windows運行時庫中的/en-us/library/2ts7cx93.aspx)。 –

回答

1

您可以發送一個非常量字符串,其中需要一個常量字符串,並且不需要進行強制轉換。因此,只要使用您以任何方式你最適合建造一個字符串打開文件:

char filename[1024]; 

getFilenameSomehow(filename, 1024); 

fopen(filename, "w"); 

您可能沒有,但是,在發送一個常量字符串,其中非常量字符串的預期。

const char *myConst = "May not be changed"; 
memset(myConst, 'X', strlen(myConst)); // Error! You may not modify a const string. 
+0

'getFilenameSomehow(filename,sizeof filename);',導致相同的結果,對我來說更好看。如果你改變尺寸,你只能在一個地方這樣做。 – glglgl

+0

我發現'sizeof <數組變量>'在重構時容易出錯。你將一段代碼提取到一個新的函數中,並且突然間這個數組是一個指針,'sizeof '現在是一個指針的大小,導致不安全的調試。在產品代碼中,我使用'#definition'來指定數組大小。 –

+0

這也打了我一次,你是對的。但是爲需要數組大小的每個地方放置一個'#define'可能會導致混淆和不清潔的代碼。 E.,例如,如果我有一個局部變量的工作,我想有一個'#define'某處周圍的功能,這是我不喜歡的,因爲它似乎不是很乾淨我。 – glglgl

0

你可以投你的變量const char *

char file_var_name[100]; 

scanf("%99s", file_var_name); 

fopen((const char *) file_var_name, "r"); 
+3

這個演員真的不應該在那裏。 – unwind

0

可以使用命令行參數main()即使用argcargv讀取輸入。閱讀this更多細節

使用strcat(存在於string.h)來連接「的.conf」在文件名的末尾。 閱讀herestrcat

相關問題