[英]read from a file c code
我有以下代碼從文件中讀取:
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);
出於某種原因,在調用printf
時url
為null
- 我該如何解決? 我需要一份數據副本。
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);
}
}
如果你的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.