2016-04-29 2 views
2

Я пытаюсь получить подстроки из строки (a = ATCG), а затем сохранить его в массиве, но я получаю предупреждение: присваивание делает целое число из указателя без литого [ включен по умолчанию] dna [i] = dna1;Сохранить строки из цикла for в массив в c

Я хочу, чтобы выходной массив для печати: ATCG TCG CG G

Я новичок в C, как это исправить?

Вот моя программа

int main() 
{ 
    char a[]="ATCG", dna[20], *dna1 ; 

    dna1 = (char *)malloc(2000); 
    int i, len_of_seg_2; 
    for(i = 0; i < strlen(a); i++) 
    { 
     len_of_seg_2=strlen(a)-i+1; 
     strncpy(dna1, a+i, len_of_seg_2); 
     dna1[len_of_seg_2-1]='\0'; 

     dna[i]=dna1; 
     printf("sequence:%s\n",dna1); 
    } 
    for(i=0;i<5;i++){ 
     printf("\nseq:%s\n",dna[i]); 
    } 
    return 0; 
} 
+1

'' dna1' является символ *, 'днк [я]' 'является char'. Ошибка в том, что она говорит. Вы назначаете указатель на целочисленное значение. Может быть, вы имели в виду 'dna [i] = * dna1'? Кроме того, не забудьте «free (dna1)» для хорошей практики. – ddz

+0

Что вы пытаетесь сделать в инструкции 'dna [i] = dna1;'? Вы пытаетесь скопировать один символ или строку. Если вы пытаетесь скопировать строку, то почему пункт назначения ('dna [i]') является символом? –

+0

Я пытаюсь скопировать всю строку. В заявлении dna [i] = dna1; Я пытаюсь сохранить dna1 как номер элемента i в массиве dna. Спасибо – user2694962

ответ

0

тип dna1 является char *, и тип dna[i] является char. Ошибка в том, что она говорит. Вы назначаете указатель (dna1) целочисленному значению (dna [i]). Вы не можете этого сделать - на самом деле, вы можете и вы это сделали, поэтому вы увидели это предупреждение - без явного указания компилятору, что вы хотите это сделать (dna[i] = (char)dna1; в этом случае). Возможно, вы имели в виду dna[i] = *dna1?. Я не знаю, что вы хотите сделать.

Кроме того, не забудьте до free(dna1) для передового опыта.

2

Вам не хватало '*' infront от dna[20].

int main() 
{ 
    char a[]="ATCG"; 
    char *dna[20]; // <-- this was char dna[20] 
    char *dna1; 

    dna1 = (char *)malloc(2000); 
    int i, len_of_seg_2; 
    for(i = 0; i < strlen(a); i++) 
    { 
     len_of_seg_2=strlen(a)-i+1; 
     strncpy(dna1, a+i, len_of_seg_2); 
     dna1[len_of_seg_2-1]='\0'; 

     dna[i]=dna1; // <-- this was the crash 
     printf("sequence:%s\n",dna1); 
    } 
    for(i=0;i<5;i++){ 
     printf("\nseq:%s\n",dna[i]); 
    } 
    return 0; 
} 

Живая демонстрация: http://ideone.com/ZhO3SZ

+0

Он печатает из первого цикла. Однако я пытаюсь распечатать его из второго цикла цикла, чтобы я мог получить доступ к сохраненным подпоследовательностям в другом месте кода. Из второго цикла цикла он печатает только последнюю подпоследовательность G. Спасибо за ваш комментарий. – user2694962

Смежные вопросы