2015-05-05 65 views
0

我想重複追加一個文件行到一個叫做行的字符串。我的代碼工作正常時,我只是嘗試打印行,但因爲我必須解析信息,我需要存儲它。如何重複將文本追加到C中的字符串?

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; 
} 
+3

您是否閱讀過[strcat](http://linux.die.net/man/3/strcat)的文檔? _「目標字符串必須有足夠的結果空間」_ –

+0

並且必須也是'nul'端口。 –

回答

3

您的代碼不起作用,因爲您需要爲字符串分配空間。您將items聲明爲char指針,但您不會將其指向有效內存,然後strcat()會嘗試向其寫入數據,從而導致未定義的行爲。

試試這個

char items[1024]; 

items[0] = '\0'; 

items[0] = '\0';是因爲strcat()將搜索第一個字符串中的'\0'字節,並從它的第二個字符串追加到第二個字符串的結尾。

您應該注意,如果要連接到一起的字符串太長而不適合items那麼問題會再次發生。

在這種情況下,您需要使用malloc()/realloc()來動態分配空間或計算結果字符串的總長度,然後爲其分配足夠的空間。