0

我試圖通過一個二維陣列(字符串數組)在C的函數,但是正在到「不相容指針型」的警告。C:傳遞指針:兼容的指針類型警告

In function ‘main’: 
warning: passing argument 1 of ‘addCodonstoHash’ from incompatible pointer type 

代碼如下。我正在嘗試使用uthash創建一個散列表,該表將使用包含3個字母的字符串作爲鍵(表示DNA密碼子),以及表示密碼子被翻譯爲的氨基酸的相關char值。因此,本質上,從下面的代碼,我想要一個散列表的形式

{「GCT」:'A','GCC':'A','GCA':'A','GCG' : 'A', 「GCN」: 'A'}

其中 'A' 代表丙氨酸。但現在,我無法簡單地將密碼的數組傳遞給應該解析它們並將它們添加到散列表的函數。我已經通過 Incompatible pointer typePassing an array of strings as parameter to a function in C 讀無濟於事......我以爲我瞭解陣列是如何分配和降解爲指針,但顯然不是。此外,當我嘗試計算addCodonstoHash中的數組長度(將會有許多代表各種氨基酸的不同大小的數組)時,它分別從printf調試行返回8和2,我無法弄清楚爲什麼會這樣。你們能引導我走向正確的方向嗎?

/* Helper method for adding codons to hash table from initialized arrays */ 
void addCodonstoHash(char AAarray[][4], char AAname) 
{ int i, size1, size; 
    size1 = sizeof(AAarray); 
    size = size1/sizeof(AAarray[0]); 

    /* Debugging lines */ 
    printf("%d\n", size1); 
    printf("%d\n\n",size); 

    for (i = 0; i < (sizeof(AAarray)/sizeof(AAarray[0])); i++) 
    { add_codon(AAarray[i], AAname); 
     printf(AAarray[i]); 
     printf("\n"); 
    } 
} 


int main(int argc, char *argv[]) 
{ /* 
    * Generate arrays for codons corresponding to each amino acid, will 
    * all eventually be incorporated into hash table as keys, with AA 
    * values. 
    */ 
    const char Ala[][4] = {"GCT", "GCC", "GCA", "GCG", "GCN"}; 
    ... 


    addCodonstoHash(Ala, 'A'); 

    delete_all(); 
    return 0; 
} 

謝謝!

+0

建議:你真的不應該用C這一點。使用像Perl或Ruby這樣的腳本語言來完成這些任務。 C不適合這樣的任務。當然,它可以做到,但正如你所看到的那樣,這是很多令人頭痛的事情。更多面向腳本的語言將使一切變得更容易。 – m0skit0

+0

這是包括在[C FAQ](http://c-faq.com/ansi/constmismatch.html) - 不存在具有常量和通過2D(或更大)陣列,以功能 –

+0

@ m0skit0一個問題,我想我可以編寫一個腳本來生成哈希表,但這個方案主要是針對大規模數據集(比如,300GB的文件,所以速度是至關重要的),所以我想C也會去這一個辦法。否則,我會讓自己頭痛不已haha – surfreak

回答

1

Ala具有類型const char(*)[4](當它被用作sizeof&操作數除外),但該參數具有鍵入char(*)[4]。你需要聲明這個爲const

+0

因此,我已經將它不再返回警告,中的printf線依然打印意想不到的事情:的sizeof(ALA)/的sizeof(丙氨酸[0])被從addCodonstoHash函數內部返回2。但是,當我在主函數中執行相同的操作時,它給了我5的期望值......什麼給了? – surfreak

+0

在男子氣概的情況下,數組被評估爲指向其第一個元素的指針。因此,在函數addCodonstoHash中,AAarray的類型爲const char(*)[4]',表達式'sizeof AAarray/sizeof * AAarray'的結果等價於sizeof(char *)/ 4 '。如果你的機器上的char大小爲8字節,那麼它就是2。爲了解決這個問題,你必須傳遞一個額外的參數來表示大小。 – md5

+0

謝謝!然後,我將爲addCodonstoHash添加另一個參數。此外,我不能相信這整個事情只是我忘了添加const關鍵字...對不起,但謝謝! – surfreak

相關問題