2016-12-05 101 views
-2

我對C真的很陌生,所以也許這個問題太簡單或者不相關。但我沒有找到這個問題的答案。查找文件夾中的特定文件並對其進行編輯

我有文件夾命名爲:-90.txt,-89.txt,...,0.txt,1.txt,2.txt,...,90.txt。

我需要一些函數,它將接收數字(文件夾名稱)作爲參數並打開該文件。

function editFile(number){ 
    fp=fopen("/data/" + number + ".txt", "wr"); 

    ... 
    // do some other things 
} 
+2

在C你不能建立在這樣的字符串。使用'sprintf'在本地變量中創建文件名。 –

+0

我知道我不能。這是一種僞代碼,它顯示了我真正需要的東西。 – hasan

回答

2

在C中,您無法靈活地向字符串添加數字。如果你想附加一個數字到一個字符串,那麼首先你必須使用itoa函數將它轉換成一個字符串。你可以找到關於該功能的在線文檔。

這裏是使用itoasprintf

  • 那麼你會怎麼用C

    • 首先將號碼添加到字符串轉換成數字符串(其存儲在char[]類型的新緩衝區)大綱創建一個類型爲char[]的新緩衝區。確保您創建了足夠大的文件以保存完整的文件路徑。
    • 然後使用strcat來追加這兩個字符串。

    除了上述所有過程,您還可以使用sprintf

    • 然後您可以將結果傳遞給fopen
  • +0

    感謝您提供修改建議。我已經更新了答案。 – crypton3535

    1

    C不具有級聯的想法字符串。所以,如果你想連接字符串必須使用的功能是這樣的:

    function editFile(char* number) 
    { 
        char pathName[MAX_PATH]; 
        strcpy(pathName, "/data/"); 
        strcat(pathName, number); 
        strcat(pathName, ".txt"); 
        fp=fopen(pathName, "wr"); 
    
        ... 
        // do some other things 
    } 
    

    您可以利用sprintf把它縮短。但是你應該增加安全檢查,因爲你有緩衝區溢出的風險。提示:strcpy_s,strccat_s,sprintf_s。 (但這'超出了你的問題的答案。)

    1

    在C中,你不能以這種方式建立一個字符串。使用sprintf在局部變量中創建文件名。

    char filename[1024]; 
    sprintf(filename, "/data/%d.txt", number); // assume that a signed value comes from `int` 
    fp = fopen(filename, "w+");    // replaced "wr" 
    
    1

    您可能習慣了高級語言,您可以通過連接整數,浮點數,其他字符串等來「構建」字符串。這不起作用在C.

    正如評論@WeatherVane指出的那樣,sprintf功能對於工作的工具:

    char buffer[PATH_MAX]; // assuming POSIX 
    sprintf(buffer, "/data/%d.txt", number); 
    fp = fopen(buffer, "wr"); 
    
    相關問題