我试图以对我来说完全陌生的方式从文本文件中获取标题。我的代码设置如下:
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函数。
我是否必须为结构的成员变量动态分配内存,如果是这样,我将如何进行此操作?或者我只是把一切都搞错了?
答案 0 :(得分:1)
你永远不会为字符串分配内存。因此,当您调用strcat()
时,目标字符串是未初始化的内存,导致未定义的行为。
此外,strcat()
的第二个参数是一个字符串,而不是一个字符。这是更多未定义的行为,因为库函数将单个字符解释为字符串的地址。
分配时,您需要初始化sequence
的存储空间。此外,对于像这样的代码(动态字符串),最好将“已分配的房间”与“字符串长度”分开,并存储两者。