【发布时间】:2012-09-03 11:58:38
【问题描述】:
我正在尝试将二维数组(字符串数组)传递给 C 中的函数,但遇到“不兼容的指针类型”警告。
In function ‘main’:
warning: passing argument 1 of ‘addCodonstoHash’ from incompatible pointer type
代码如下。我正在尝试使用 uthash 创建一个哈希表,其中包含 3 个字母的字符串作为键(代表 DNA 密码子),以及代表密码子翻译成的氨基酸的相关字符值。所以本质上,从下面的代码中,我想要一个形式的哈希表
{“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 并不真正适合此类任务。当然,它可以做到,但正如你所看到的,这很让人头疼。更加面向脚本的语言将使一切变得更容易。
-
这在C FAQ 中有介绍 - const 和将二维(或更大)数组传递给函数存在问题
-
@m0skit0 我想我可以写一个脚本来生成哈希表,但是这个程序是为海量数据集设计的(比如,300GB 的文件,所以速度很重要),所以我认为 C 会是这条路要走。不然我就白白让自己头疼了哈哈
-
您必须考虑头痛是否值得(小?)速度增加。 Perl 有很多用于生物信息学的模块。而且您将编写运行速度更快的代码。我建议你尝试一下 Perl,如果速度不能让你信服,你可以尝试一种混合方法,这将包括两个世界的好处(但也包括缺点......)。 Perl 可以轻松使用 C 库。
-
肯定会调查它,感谢您的想法。我猜由于这个程序将花费大部分时间来迭代字符串,我可以在 C 中执行此操作,并在 Perl 中执行顶级文件读取/写入...
标签: c string pointers multidimensional-array incompatibletypeerror