gpt4 book ai didi

C - 将字符添加到字符串的开头

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:42 25 4
gpt4 key购买 nike

我尝试创建一个字符串数组,其中每个元素都是一个字符和一个字符串的串联。

例如:

char base_array[4] = {'A', 'C', 'G', 'T'};

char *kmer = "ACGT";

char *edge[4] = {"AACGT", "CACGT", "GACGT", "TACGT"};

我尝试使用此代码但生成了段错误。

char** kmer_head_append(const char *kmer, const char *base) {

int i;
char **edge = malloc(BASE * sizeof(char *));

for ( i = 0; i < BASE; i++ ) {
edge[i] = (char *) malloc((strlen(kmer) + 1) * sizeof(char *));
strcpy(edge[i], &base[i]);
*((*(edge + i)) + strlen(&base[i])) = kmer;
*((*(edge + i)) + strlen(&base[i]) + 1) = '\0';
}

return edge;
}

int main(void) {

char base_array[4] = {'A', 'C', 'G', 'T'};
char **edge = kmer_head_append("ACGT", base_array);
return 0;
}

编辑:

如果 char *kmer = "DEFG" 输出是一个数组,其中元素是 ADEFGCDEFGGDEFG e TDEFG

最佳答案

您需要 char 的大小而不是 char **

edge[i] =  malloc((strlen(kmer) + 2)); //2 to hold char + \0

如果要复制单个 char,请不要使用 strcpy

    strcpy(edge[i], &base[i]); --> edge[i][0] = base[i];

你正在做指针赋值你需要的是strcpy

*((*(edge + i)) + strlen(&base[i])) = kmer; --> strcpy((char *)&edge[i][1], kmer);

删除下面的行,因为 \0 已经被 strcpy 附加。

    *((*(edge + i)) + strlen(&base[i]) + 1) = '\0';

或者干脆

   sprintf(edge[i], "%c%s", base[i], kmer);

关于C - 将字符添加到字符串的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55921552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com