2014-11-01 94 views
-1

新增C和編譯語言。我需要主要包括從另一個文件中的代碼動態一行文字:動態包含C文件中的可執行文件

#if T2T_NDEFFILE_PREDEF == URI 
const uint8_t T2T_DATA_DEF[] = { 
#include "/home/link" 
     // Terminator TLV 
     0xF3 
}; 
#endif 

我一直在使用的#include鏈接到文本文件試過,這個工程然而,當在文件的「鏈接」文本在編譯的可執行文件中顯然不會改變它。有沒有簡單的方法來做到這一點?

+1

難道你只是寫一個程序,打開並讀取文本文件?這裏的問題究竟是什麼? – 2014-11-01 23:31:46

+0

問題是因爲我說我根本不知道任何C,我只需要以動態的方式包含這個文件。如果你能舉出一個很棒的例子。 – Ripwinder 2014-11-01 23:40:33

+0

給出一個* what *的例子,確切地說?不幸的是,我真的不知道你想在這裏實現什麼。您是否嘗試在線搜索C編程教程? [這是我在10秒左右發現的一個。](http://www.cprogramming.com/tutorial/cfileio.html) – 2014-11-01 23:52:38

回答

2

#include指令只是在C編譯器將其轉換爲可執行文件之前,將其他文件的內容複製到源代碼中。換句話說,這是一次性的過程,其他文件「烘焙」到您的代碼中。

如果您需要每次程序運行時「動態」重新加載文件的內容,您需要使用C代碼自行加載它。這裏有一個例子,從我自己的一個項目拉動:

/* 
[PUBLIC] Load the contents of a file into a malloc()'d buffer. 
*/ 

unsigned char *txtLoadFile(const char *file_name, long *length) 
{ 

    FILE   *fsrc = NULL; 
    unsigned char *data = NULL; 
    long   size = 0; 

    /* Attempt to open the requested file. */ 

    fsrc = fopen(file_name, "rb"); 
    if (!fsrc) { return NULL; } 

    /* Get the length of the file in bytes. */ 

    fseek(fsrc, 0, SEEK_END); 
    size = (long)ftell(fsrc); 
    rewind(fsrc); 

    /* Copy the data into memory (with an extra zero byte, in case it's text). */ 

    data = (unsigned char*)malloc(size + 1); 

    if (data) 
    { 
    memset(data, 0, size + 1); 
    fread(data, 1, size, fsrc); 
    } 

    fclose(fsrc); 

    /* Return the result. */ 

    if (length) { *length = size; } 

    return data; 

} 

此代碼應該是基本上不言自明的,但也有值得指出的幾件事情:該文件正在被打開

  • rb(讀取二進制)模式 - 您可能需要使用r(讀取文本),具體取決於您在做什麼。如果是這樣,你可能會想要使用普通的char*而不是unsigned char *來存儲數據,就像我在這裏所做的那樣。
  • 爲字符串的零NULL結束符分配了一個額外的字節。
  • 緩衝區正被存儲在動態分配的內存中。由於您似乎更熟悉Python或Ruby等動態語言,因此我應該提醒您,一旦完成了分配的內存,您將需要分配內存。
+0

只是一些(次要)筆記:[不需要施放'malloc'](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc); [在Unix中沒有'文本'模式](http://stackoverflow.com/questions/2174889/whats-the-differences-between-r-and-rb-in-fopen);沒有必要將整個malloc的內存清零,'data [size] = 0;'這裏就夠了。 – usr2564301 2014-11-02 01:41:21

相關問題