我有以下代码从文件中读取:
fin = fopen("file1.txt", "r");
char* url;
if ( fin )
{
while ( line = read_line(fin) )
{
if ( (url=strstr(line, "url="))!=NULL )
{
fprintf(stdout, "%s \n", url);
url=line;
}
free(line);
}
}
printf("line is:%s ",url); //this one is NULL. How to solve this?
// I need A COPY OF THE DATA
fclose(fin);
由于某些原因,url
在调用null
时为printf
- 我该如何解决?我需要一份数据副本。
答案 0 :(得分:2)
url只是一个指向内存块的指针,它不包含字符串。当您调用free(line)时,您将删除指向的内存URL。
您需要为url分配内存,然后使用strcpy复制字符串。
还要确保if中的代码实际运行,否则url指向内存中的随机位置。
这些方面的东西。我不确定strcpy的参数顺序,在尝试之前查找它。
char* url = 0;
if ( fin )
{
while ( line = read_line(fin) )
{
char* tmp_url = strstr(line, "url="));
if (tmp_url != NULL)
{
if(url != 0) free(url);
url = (char*)malloc(sizeof(char)*strlen(line)+1); //if you don't know why I'm adding +1 look up null terminated strings
fprintf(stdout, "%s \n", url);
strcpy(url, line);
}
free(line);
}
}
答案 1 :(得分:0)
如果你的read_line
函数没有分配内存会更容易。这是一个建议的更改(未经测试:xmalloc,xfopen是明显的失败时退出的包装器):
char *path = "file1.txt";
char* url;
size_t line_size;
line = xmalloc( line_size = 128 );
fin = xfopen( path, "r");
/* Pass &line so that read_line may realloc if necessary */
while( read_line2( fin, &line, &line_size )) {
if( url = strstr( line, "url=" )) {
printf( "%s \n", url);
url=line;
}
}
}
printf("line is:%s ",url);
free(line);
fclose(fin);