2016-12-06 55 views
-3

我目前正在使用文件並通過它們進行排序。到目前爲止,我可以打開文件並閱讀每一行。現在我正試圖將每一行分成特定的部分。唯一的問題是當我打印printf(「%s \ n」,line)行時,我的稱爲convertLine()的函數;它打印完全是我想要的。但我需要在main中打印,而不是從main調用的函數convertLine()中打印。這裏是我的convertLine()函數:字符數組在不同的函數中操作時不會改變

void convertLine(char line[401], int *number, char fileLine[401]) 
{ 


    char firstNum[2] = { fileLine[6] }; 
    char secondNum[2] = { fileLine[7] }; 
    char thirdNum[2] = { fileLine[8] }; 
    char colonChar[2] = { fileLine[9] }; 
    char fullMark[7] = { "" }; 
    int length = 0; 


    length = strlen(fileLine); 
    ++length; 
    line = (char*)malloc(length); 

    strcpy(fullMark, firstNum); 
    strcat(fullMark, secondNum); 
    strcat(fullMark, thirdNum); 
    *number = atoi(fullMark); 

    if (strstr(secondNum, ":")) //this works 
    { 
     strcpy(line, &fileLine[7]); 
    } 
    else if (strstr(secondNum, ":")) 
    { 
     strcpy(line, &fileLine[8]); 
    } 
    else 
    { 
     strcpy(line, &fileLine[9]); 
    } 
    printf("%s \n", line); //i want to be able to do this in main 
    length = strlen(line); 
    ++length; 
    line = (char *)realloc(line, length); 




    free(line); 


    return; 

} 
+0

該代碼沒有意義。首先,C是按價值劃分的。其次,'line =(char *)realloc(line,length);免費(線);'是完全荒謬的。 – EOF

+0

當然,我明白混亂。我明白C是按值調用的,但是當我在main函數中打印這個函數的數字變量時,怎麼會這樣呢?此外,爲什麼會重新分配我的線陣列的空間是無意義的,當內部的內容被更改並可能佔用不同的空間量時? – bodotheguy

+0

你真的需要從'c'的絕對基礎開始。我沒有時間來解釋這個程序中的所有錯誤,也不是我真的想要教一個比較字符串與字符串與'=='如何在沒有付款的情況下寫'c'的人。 – EOF

回答

2

從你的函數刪除printf()free()。不應使用free()realloc(),因爲line可能來自非malloc化的內存塊。從main()呼叫convertLine(),然後打印line字符串的內容。然後,如果使用malloc/realloc分配字符串,則可以重新分配和/或釋放該字符串。

相關問題