我的問題是我無法將處理后的字串回傳給函式。該函式的作業是它必須接受一個字串,更改其字母,并將處理后的字串回傳給函式。
char *dna_strand(const char *dna)
{
int a;
for (a = 1; *(dna a) != '\0' ; a ) {
}
char array[a];
for (int i = 0; i < a; i) {
if ('A' == *(dna i)) {
array[i] = 'T';
} else if ('T' == *(dna i)){
array[i] = 'A';
} else{
array[i] = *(dna i);
}
}
return array;
}
錯誤:[1]:https ://i.stack.imgur.com/uwvCh.png
uj5u.com熱心網友回復:
區域變數char array[a];超出了呼叫者的范圍,因此您不能使用它來回傳值。malloc()而是使用或在堆上分配記憶體strdup():
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *dna_strand(const char *dna) {
char *array = strdup(dna);
if (!array) return array;
for (int i = 0; array[i]; i ) {
if (dna[i] == 'A') array[i] = 'T';
else if (dna[i] == 'T') array[i] = 'A';
}
return array;
}
int main() {
char *s = dna_strand("ATTCG");
printf("%s\n", s);
free(s);
return 0;
}
如果您想花哨strpbrk()地查找下一個字母,我們需要映射而不是一次步進一個字母:
char *dna_strand(const char *dna) {
char *array = strdup(dna);
for (char *p = array; p; p = strpbrk(p, "AT")) {
if (*p == 'A') *p = 'T';
else *p = 'A';
}
return array;
}
uj5u.com熱心網友回復:
您可能不會回傳指向具有自動存盤持續時間的本地陣列的指標,因為退出函式后該陣列將不再存在并且回傳的指標將無效。
您需要動態分配一個陣列。
注意這個回圈
for (a = 1; *(dna a) != '\0' ; a ) {
當用戶將空字串傳遞給函式時,可以呼叫未定義的行為。
你至少應該寫
int a = 0;
while ( *(dna a) != '\0' ) a;
a;
或者
int a = 0;
do ; while ( *( dna a ) != '\0' );
之后,您可以動態分配一個字符陣列
char *array = malloc( a );
uj5u.com熱心網友回復:
你不能回傳一個指向區域變數地址的指標,因為當它離開函式的作用域時它會被銷毀。
因為,a不是一個常數值,所以不能初始化array為static。因此,唯一的選擇是使用heap-allocation。
a可以這樣初始化:
char *array = calloc(a 1, sizeof(char));
注意:calloc()在stdlib.h頭檔案中定義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/464184.html
上一篇:將專案添加到堆疊使其崩潰
