【发布时间】:2019-09-19 03:38:43
【问题描述】:
我尝试创建一个字符串数组,其中每个元素都是一个字符和一个字符串的串联。
例如:
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" 输出是一个数组,其中元素是ADEFG、CDEFG、GDEFG e TDEFG
【问题讨论】:
-
您能否修改示例中使用的名称,使它们以您想要的方式相互对应?或者至少提供一个对您的函数的示例调用?很难跟踪对应关系以确定您打算做什么。
-
还要注意,“追加”是在末尾添加一些东西。你似乎想要做的是prepend.
-
不是很清楚,请更改您的示例并向我们展示
char *kmer = "WXYZ"的预期结果。 -
@Jabberwocky 我只是用你的例子编辑
-
也许你应该创建一个类似
char *concatenate_char_str(char prefix, const char *str) { char *ret=malloc(1+strlen(str)+1); ret[0]=prefix; strcpy(ret+1, str); return ret; }的函数并在你的函数中使用它。将您的问题分成足够小的块,以便于理解。
标签: c string dynamic-memory-allocation