坚持从文本文件中抓取标题

时间:2014-10-13 09:18:35

标签: c

我试图以对我来说完全陌生的方式从文本文件中获取标题。我的代码设置如下:

struct sequence   
 { char *name; 
   char *sequence;  
   int  sequencelen;
 };

int main(int argc, char *argv[]) 
{
    struct sequence *newseq;
    getsequence("test.txt", newseq);

}


 void getsequence(const char *file, struct sequence *seq)
{
    FILE *fp = fopen(file, "r");
    struct sequence *seqptr = malloc(sizeof(*seq));
    char c;

    if (!fp)
    {
        exit(1);
    }

    while ((c = fgetc(fp)) != "\n")
    {
        if (c == '>')
            continue;

        strcat(seqptr -> name, c);
    }

    printf("Name: %s", seqptr -> name); //Expected output: this_is_a_new_sequence_title
}

文本文件的结构如下:

>this_is_a_new_sequence_title

像我说的那样使用结构对我来说是新的,但是看看它是如何使用它我想知道如何去做。但是,如果我正确使用它们,我不确定,特别是关于strcat函数。

我是否必须为结构的成员变量动态分配内存,如果是这样,我将如何进行此操作?或者我只是把一切都搞错了?

1 个答案:

答案 0 :(得分:1)

你永远不会为字符串分配内存。因此,当您调用strcat()时,目标字符串是未初始化的内存,导致未定义的行为。

此外,strcat()的第二个参数是一个字符串,而不是一个字符。这是更多未定义的行为,因为库函数将单个字符解释为字符串的地址。

分配时,您需要初始化sequence的存储空间。此外,对于像这样的代码(动态字符串),最好将“已分配的房间”与“字符串长度”分开,并存储两者。