我写了一个函数以交叉到DNA段,如果其中一个是 null
,则应返回 -1
,如果它们彼此相等,则必须返回 -2
进行细分故障,我的代码有什么问题?一个不:ı知道什么是分割故障。
#include <stdio.h>
int crossover(char** dna1, char** dna2, int crossoverIndex)
{
char *temp;
int a=0;
if(dna1==NULL || dna2==NULL)
{
return -1;
}
if(dna1==dna2)
{
return -2;
}
for(a=0;dna1+crossoverIndex+a;a++)
{
temp=*(dna1+a+crossoverIndex);
*(dna1+a+crossoverIndex)=*(dna2+a+crossoverIndex);
*(dna2+a+crossoverIndex)=temp;
}
return 0;}
int main(){
int i,j;
char dna1[1][3];
char dna2[1][3];
dna1[0][0]='G';
dna1[0][1]='T';
dna1[0][2]='T';
dna1[1][0]='A';
dna1[1][1]='G';
dna1[1][2]='T';
dna2[1][0]='G';
dna2[1][1]='T';
dna2[1][2]='T';
dna2[0][0]='A';
dna2[0][1]='G';
dna2[0][2]='T';
crossover(dna1,dna2,0);
for(i=0;i<2;i++)
{
for(j=0;j<2;j++){
printf("%c ",dna2[i][j]);
}
printf("n");
}
return 0; }
您的数组仅为1x3,因此第一个索引的唯一有效值是0
,尝试
char dna1[2][3];
char dna2[2][3];
此循环的延续检查也令人怀疑:
for (a = 0; dna1 + crossoverIndex + a; a++)
感谢所有答案和评论:)我的代码上帝首先两个问题;我应该写
char dna1[2][3];
char dna2[2][3];
而不是
char dna1[1][3];
char dna2[1][3];
,但实际上这不是我的真正问题,因为它很容易看到。另一个在交叉函数中。我应该写
for(a=0;*(dna1+crossoverIndex+a);a++)
而不是
for(a=0;dna1+crossoverIndex+a;a++)
停止循环。
a不是:在我的问题上,可以保证两个DNA字符串的大小相同。