2015-12-02 76 views
-6

今天過得如何。我有一個關於文件名處理的問題:D。我的代碼不想工作,它給我虛假分割如何爲C中的每個文件創建一個唯一的名稱?

的想法是讓唯一的文件名,它如果的同名文件已經存在創建。首先是沒有文件的例外,所以for循環從1開始,而不是從0開始。

unistd.h is required!

char fileName[15][100]; 
sprintf(fileName[0],"output.txt"); 
FILE *output; 

    for(int i = 1 ;i < 100; i++){ 
     sprintf(fileName[i],"Output%d.txt",i+1); 

     //File exists 
     if(!access(fileName[i],F_OK)) 
     { 
      //Create and open a file 
      output = fopen(fileName[i], "w"); 
      break; 
     }  
    } 

我只是需要做一個嘗試的功能(如一段時間),直到它找到它不採取名字。我只是把那裏的for循環限制到100.

+1

那麼你的問題是什麼? – owacoder

+1

*「如果**具有相同名稱的文件已存在,則創建**」。*如果該名稱的文件已存在,則它不是唯一的。 –

+0

你真的需要閱讀指針。 '&文件名[I]'?你不斷用新的東西覆蓋你的'fileName'字符串的一部分。 'fileName是一個字符串,而不是一個字符串數組。 'fileName [i]'沒有意義 –

回答

0

你沒有爲指向數組的指針分配任何內存。此外,你的語法在這裏和那裏都有點兒偏差。這個簡單的例子展示瞭如何爲一個字符串數組分配內存,分配一些值,打印它們並釋放內存。

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

#define MAXNAMES 10 
#define MAXLEN 32 

int main(void) 
{ 
    char* fileName[MAXNAMES]; 
    int i; 

    for(i=0; i<MAXNAMES; i++) 
     if ((fileName[i] = malloc(MAXLEN)) == NULL) 
      exit(1); 

    sprintf(fileName[0],"Output.txt");  // your first name is an exception  
    for(i = 1; i<MAXNAMES; i++)   // the rest of the names 
     sprintf(fileName[i], "Output%d.txt", i+1); // using your offset of 1 

    for(i = 0; i<MAXNAMES; i++) 
     printf("%s\n", fileName[i]); 

    for(i = 0; i<MAXNAMES; i++) 
     free(fileName[i]); 

    return 0; 
} 

程序輸出:

Output.txt 
Output2.txt 
Output3.txt 
Output4.txt 
Output5.txt 
Output6.txt 
Output7.txt 
Output8.txt 
Output9.txt 
Output10.txt 
+0

等你一氣呵成嗎?我對嗎?我只需要一個try函數(如while),直到找到未被採用的名稱。我只是把那裏的for循環限制到100. –

+0

@RandomNoob這是一個簡單的例子,向你展示如何使用字符串數組。它並不是要實現你的確切問題,因爲我沒有你正在使用的庫函數。 –

+0

那麼最有趣的一點是,我有一個半年前寫的代碼片段,我只是不能改變它 –

1

你要的malloc內存中的字符串。

例如

char** fileName; 
int Number_Of_Strings, String_Length, i; 
fileName = malloc(Number_Of_Strings * sizeof(char*)); 

for (i = 0; i < Number_Of_String; i++) // For each string 
    fileName = malloc(String_Length * sizeof(char)); 

Number_If_Strings:有多少串,你需要什麼? STRING_LENGTH:每串

+0

謝謝,但我不想分配任何東西..我已經在程序中分配了幾乎所有的變量,所以我想讓它保持靜態。感謝您的建議 –

1

的長度你在這裏什麼:

char* fileName[100]; 

...是100個字符指針數組。但是,你並沒有爲實際的字符串本身騰出空間。

當你這樣做:

sprintf(&fileName[0],"output.txt"); 

...你寫的「output.txt中」的位置在文件名[0]的地址,最有可能爲0x0或者根據一些隨機值,指出你的編譯器以及是否在堆棧或堆上分配數組等。這通常會導致分段違例,並且程序終止。

+0

謝謝。沒有注意錯誤的代碼複製! –

相關問題