簡體   English   中英

從文件c代碼中讀取

[英]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);

出於某種原因,在調用printfurlnull - 我該如何解決? 我需要一份數據副本。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM