我需要用 C 語言撰寫一個程式,用 getline 讀取一個大的 XML 檔案,問題是大約 30 億行中只有 2085 行被讀取。在以下代碼中會出現問題。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
size_t l = 0;
char *line;
line = NULL;
while (getline(&line,&l,stdin)>0) {
getline(&line,&l,stdin);
printf("%s\n", line);
printf("%i\n", i);
free(line);
line = NULL;
}
return 0;
}
我的第一個目標是使用 printf 顯示線條,以便我可以使用它。從 2080 到 2090 的行都不為空。如果我將回圈條件更改為 >=0,大約 80.000 被讀入,如果我將 printf 注釋掉,大約 130.00 行。但相反,我得到了一個分段錯誤。在這種情況下,我真的不知道如何解決。我在 Windows 11 上使用 Visual Studio Code 編輯和 MYSYS2 MinGW 運行代碼。首先找不到 getline 函式,我通過復制粘貼此頁面的 getline 代碼來解決它,因為#include 標頭似乎不作業。
uj5u.com熱心網友回復:
- 當您閱讀該行時,您會跳過每一行,
while然后在 while 正文中再次閱讀它 - 您有記憶體泄漏(與第 1 點相同的原因)
int main(void)
{
size_t l = 0;
ssize_t retVal;
char *line;
line = NULL;
do
{
if((retVal = getline(&line,&l,stdin)) != -1)
{
printf("Buff_size:%zu Line_length: %zd Line:\"%s\"\n", l, retVal, line);
}
}while(retVal != -1);
free(line);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/477622.html
上一篇:opengl不會重疊超過1個紋理
下一篇:如何擺脫“std::thread::id”與“WinAPIthread-id”相同的id(在Windows上)?
