c - C - 将字符添加到字符串的开头
问题描述
我尝试创建一个字符串数组,其中每个元素都是一个字符和一个字符串的串联。
例如:
char base_array[4] = {'A', 'C', 'G', 'T'};
字符 *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
eTDEFG
解决方案
你需要大小char
不char **
edge[i] = malloc((strlen(kmer) + 2)); //2 to hold char + \0
strcpy
如果要复制 single ,请勿使用char
。
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);
推荐阅读
- json - 如何在 Swift 中将数据附加到decodedData
- python - 删除重复项,将具有最高值的行保留在另一列中
- css - 使用 CSS,如何创建*厚* 超过 1px 的文本笔划轮廓?
- css - 我无法在 Font Awesome 5 中应用 Facebook 或 Instagram 图标作为内容
- c - 如果我们从 2^63 中减去 1000,为什么结果会少 1024 而不是 1000?
- python - 即使列不存在也可以找到列的总和,并添加零
- eclipse - cmake4eclipse 和 -D 选项
- php - Mysql LOAD INFILE没有将数据上传到数据库表中
- java - 出现编译错误 - 基本 Java 小程序
- javascript - 在 mocha 上进行测试 - “expect string”测试失败,但我的对象有效地返回了一个字符串