簡體   English   中英

更新結構數組值后,值保持不變

[英]Values stays the same after updating a struct array value

我有一個包含2^32鍵/值對的文件;

32410806935257552 7355088504912337885
32422108164434515 8864339902215816897
32476145725020530 3183682744179377405
32554129507725755 7487866067392975840
32556703862039701 6580190515895793022
32576110112978588 468697310917255961
32589559935917707 757063057981860288
32724197203660231 4397507527199428746
32740607750878547 497049298362389181
32804063187658851 690408619066859126
....

我需要讀取該文件,並在每次需要時獲得1000 lines

我正在使用下面的功能;

void setChunk(pair* pairs, int setNumber, FILE *file){
    int start = setNumber * 1000;
    int finish = start + 1000; 
    int count = 0;
    int i = 0;
    char line [c];
    char *search = " ";

    printf("chunk is set between %d and %d\n", start, finish);
    if ( file != NULL ){

        while (fgets(line, sizeof line, file) != NULL) /* read a line */
        {
            if (count >= start && count < finish)
            {  
                pairs[i].key = strdup(strtok(line, search));

                pairs[i].value = strdup(strtok(NULL, search));

                i++;
            }

            count++;
        }   
    }
}

我正在使用first 1000 thousands key/value對,並毫無問題地寫入struct array (pairs) 然后,我嘗試獲取下一個千對,但是鍵/值結構數組保持不變。 我無法更新其內容。 這可能是什么原因?

注意: setNumber定義了我將采用的千對。 如果為0 ,則得到0-1000之間的線,如果為18 ,則得到18000-19000

我在這樣的循環中調用setChunk函數;

for(j=0; j<=fileNumber; j++){
        if ( file[j] != NULL )
        {
            printf("%d. chunks is started to fill\n", j);
            pairs[j] = malloc(1000 * sizeof(pair));
            setChunk(pairs[j],setnumber[j],file[j]);
            setnumber[j]+=1;
        }
    }

關於這些行:

setChunk(pairs[j],setnumber[j],file[j]); 
setnumber[j]+=1;`  

setnumber是一個數組,

(假設它已初始化為全0。)

因此,條目setnumber [0]在第一個調用中傳遞。 然后將setnumber [0]遞增為1

在下一個呼叫上,將setnumber [1]傳遞給呼叫,然后將setnumber [1]遞增到1。

IE在每次調用時的第二個參數始終為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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