我正在尝试重复将文件中的一行追加到名为lines的字符串中。当我尝试打印行时,我的代码工作正常,但由于我必须解析信息,我需要存储它。
int main(int argc, char *argv[])
{
// Check for arguments and file pointer omitted
FILE *f = fopen(argv[1], "r");
char *times;
int i = 0;
for (i = 0; i < 2000; i++)
{
char line[80];
if (fgets(line, 80, f) == NULL)
break;
//I want every line with the text "</time> to be added to string times
if(strstr(line, "</time>"))
{
times = strcat(times, line); //This line is my problem
}
}
printf(times);
fclose(f);
return 0;
}
答案 0 :(得分:3)
您的代码无法正常工作,因为您需要为字符串分配空间。您将items
声明为char
指针,但是您没有指向有效内存,然后strcat()
尝试写入它,从而导致未定义的行为。
试试这个
char items[1024];
items[0] = '\0';
items[0] = '\0';
是因为strcat()
将在第一个字符串中搜索'\0'
字节,并将第二个字符串附加到第二个字符串的末尾。
你应该注意,如果你要连接在一起的字符串太长而不适合items
那么问题就会再次发生。
在这种情况下,您需要使用malloc()
/ realloc()
动态分配空间或计算结果字符串的总长度,然后为其分配足够的空间。