gpt4 book ai didi

C 中与二维字符数组的连接

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:35 25 4
gpt4 key购买 nike

我正在将一个文本文件逐行读取到一个二维数组中。我想连接 char 数组,所以我有一个长 char 数组。我在这方面遇到了麻烦,我可以让它与两个字符数组一起工作,但是当我尝试做很多时,我就出错了。

目前 char 数组看起来像这样:

AGCTTTTCATTC

我想得到这样的东西:

AGCTTTTCATTCAGCTTTTCATTC

我已经包含了我的一些代码。

int counter = 0; 
fid = fopen("dna.fna","r");
while(fgets(line, sizeof(line), fid) != NULL && counter!=66283 ) {
if (strlen(line)==70) {
strcpy(dna[counter], line);
counter++;
}
}
int dnaSize = 6628;
//Concatenating the DNA into a single char array.
int i;
char DNA[dnaSize];
for(i = 0; i<66283;i++){
strcpy(DNA[i],dna[i]);
strcat(DNA[i+1],dna[i+1]);
}

最佳答案

你只需要循环到 < counter那么,你是复制还是拼接?你只需要做其中之一。

我建议只在循环中使用 strcat,但要初始化 DNA。

char DNA[dnaSize] = ""; //initalise so safe to pass to strcat
for(i = 0; i<counter;i++)
{
strcat(DNA,dna[i]); //no need for indexer to DNA
}

此外,您还需要考虑两个数组的大小。我相信(希望)dnachar 数组的数组.如果是,我猜是66283长在它的第一个维度。所以它不适合 DNA (6628 长),即使每行的长度为 1 个字符。

这里有一个关于如何分配恰到好处的内存量的想法:

#define MAXLINELENGTH (70)
#define MAXDNALINES (66283)

//don't copy this line, it will not work because of the sizes involved (over 4MB)
//it will likely stack overflow
//just do what you are currently doing as long as it's a 2-d array.
char dna[MAXDNALINES][MAXLINELENGTH + 1];

int counter = 0;
int totalSize = 0;
fid = fopen("dna.fna","r");
while(fgets(line, sizeof(line), fid) != NULL && counter!=MAXDNALINES ) {
const int lineLength = strlen(line);
if (lineLength==MAXLINELENGTH) {
strcpy(dna[counter], line);
counter++;
totalSize += lineLength;
}
}

//Concatenating the DNA into a single char array (of exactly the right length)
int i;
char *DNA = malloc(totalSize+1); // the + 1 is for the final null, and putting on heap so don't SO
DNA[0] = '\0'; //the initial null is so that the first strcat works
for(i = 0; i<counter;i++){
strcat(DNA,dna[i]);
}

//do work with DNA here

//finally free it
free(DNA);

关于C 中与二维字符数组的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783771/

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