我試圖通過一個二維陣列(字符串數組)在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 type 和 Passing 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;
}
謝謝!
建議:你真的不應該用C這一點。使用像Perl或Ruby這樣的腳本語言來完成這些任務。 C不適合這樣的任務。當然,它可以做到,但正如你所看到的那樣,這是很多令人頭痛的事情。更多面向腳本的語言將使一切變得更容易。 – m0skit0
這是包括在[C FAQ](http://c-faq.com/ansi/constmismatch.html) - 不存在具有常量和通過2D(或更大)陣列,以功能 –
@ m0skit0一個問題,我想我可以編寫一個腳本來生成哈希表,但這個方案主要是針對大規模數據集(比如,300GB的文件,所以速度是至關重要的),所以我想C也會去這一個辦法。否則,我會讓自己頭痛不已haha – surfreak