繁体   English   中英

C - 将char添加到string的beginnig中

[英]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"则输出是一个数组,其中元素是ADEFGCDEFGGDEFGTDEFG

你需要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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM