2014-07-19 28 views
0

我知道這個問題已被問到,但我看到的答案並不適用於我的案例。在我的程序結束時,會打開一些文件供寫入。爲了簡單起見,我只列出了兩個。變量dirPath是執行時傳入的命令行參數。如何連接兩個字符串(一個變量),同時仍然能夠重用其中一個參數(變量)?

這是我第一次嘗試:

FILE *fid_sensory_output; 
FILE *fid_msn_output; 

fid_sensory_output = fopen(strcat(dirPath,"sensory_output"), "w"); 
fid_msn_output = fopen(strcat(dirPath,"msn_output"), "w"); 

這不起作用,因爲strcat的不返回連接字符串的副本,而是追加第二對Arg的1號。在尋找工作時,我發現these recommendations,一起使用strcpy和strcat,或使用sprintf。

我第一次嘗試的sprintf但得到一個錯誤,說我是想通過在一個char *預期的int,即使dirPath被聲明爲char *。我也嘗試傳遞字符串文字,但沒有運氣。

我嘗試過以各種方式使用strcat和strcpy,但沒有任何成功。有什麼建議麼?

回答

2

的唯一方法:

FILE *fid_sensory_output; 
char *string; 

string=malloc(strlen(dirpath)+strlen("sensory_output")+1); 
strcpy(string,dirpath); 
strcat(string,"sensory_output"); 

fid_sensory_output = fopen(string, "w"); 
free(string); 
+0

數這確實對我來說,太感謝你了! – aweeeezy

-1
char temp_dir_path[256]; 
strcpy(temp_dir_path, dirPath); 
fid_sensory_output = fopen(strcat(temp_dir_path, "sensory_output"), "w"); 
strcpy(temp_dir_path, dirPath); 
fid_msn_output = fopen(strcat(temp_dir_path,"msn_output"), "w"); 
1

您可以使用snprintf的完成這個任務。每個字符串操作應考慮緩衝區大小以避免緩衝區溢出。

的snprintf返回字符寫入緩衝區(不包括字符串結束符「\ 0」)

FILE *fid_sensory_output; 
FILE *fid_msn_output; 
char path[MAX_PATH]; 

snprintf(path, sizeof(path), "%s/%s", dirPath, "sensory_output"); 
fid_sensory_output = fopen(path, "w"); 

snprintf(path, sizeof(path), "%s/%s", dirPath, "msn_output"); 
fid_msn_output = fopen(path, "w"); 
相關問題