c - 卡在从文本文件中获取标题上

标签 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 函数方面。

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

最佳答案

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

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

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

关于c - 卡在从文本文件中获取标题上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26336559/

相关文章:

c - 我使用埃拉托色尼筛作为素性测试。为什么我得到 2297 是复合数?

c - Frama-C 排序函数

c - 使用 pjreddie 的 YOLOv3 时出现段错误(核心转储)

c - 为什么ftell在此函数中返回0?

c - 为什么我的数组在初始化后长度不正确?

c - 生成指数分布的随机数

c++ - 开发iOS应用最常见的方法是什么?

c - 从 pthread 退出会释放 malloced 内存吗?

c - c上的位解析程序

c - 一次在多维数组中写入一个字符串 C