2013-06-24 3 views
0

Я пытался реализовать ЛСК на языке C, но я застрял на эквивалент следующего кода в C:строка и символ конкатенации в C

return backtrack(C, X, Y, i-1, j-1) + X[i] 

Я попытался с помощью strcat():

char *str = sequence(arr,pGene1,pGene2,i-1,j-1); 
char chr= pGene1[i-1]; 
char *chr1 = &chr; 
return strcat(str,chr1); 

но это дает мне ошибку сегментации. В приведенном выше коде sequence является рекурсивной функцией.

ответ

0

Я использовал эту функцию, и теперь он работает

char * addchartostring(char * str, char mych){ 
      int l = strlen(str); 
      char *added = (char*)malloc((l+2)*sizeof(char)); 
      char ch[] = {mych, '\0'}; 
      strcpy(added, str); 
      strcat(added, ch); 
      return added; 
    } 
2

Вам не хватает \0 терминатор от chr. Также вам не нужен дополнительный указатель chr1. Следующие должны работать:

char *str = sequence(arr, pGene1, pGene2, i-1, j-1); 
char chr[2] = { pGene1[i-1], '\0' }; 
return strcat(str, chr); 
+0

Да, вы правы, но почему-то до сих пор не работает. –

+1

Убедитесь, что ваша функция 'sequence' выделяет достаточное количество памяти для добавления дополнительных символов. Если нет, вам нужно будет создать новую строку для результата. –

+0

Да, это то, о чем я думал. Благодарю. –

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