[英]C - Add char to beginnig of string
我尝试创建一个字符串数组,其中每个元素是char和字符串的串联。
例如:
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
和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);
您可以使用valgrind查看您的段错误。
char **edge = kmer_head_append("ACGT", base_array); //base_array is a char str[4]
因此,在您的原型中,您需要:
char** kmer_head_append(const char *kmer, char base[4])
你可以像malloc base那样:
char **edge = malloc(sizeof(char *) * (4 + 1)); because base is equal to 4 and + 1 for putting NULL at the end
然后:
for ( i = 0; i < 4 + 1; i++ ) {
edge[i] = malloc(sizeof(char) * (5 + 1)) ; // 5 for the new string and + 1 for '\0'
一步一步做!
那么你只需要用strcpy做你的线
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.