2016-12-06 8 views
-3

現在、ファイルの処理とソートを行っています。これまではファイルを開いて各行を読むことができます。今、私は各行を特定の部分に分割しようとしています。唯一の問題は、printf( "%s \ n"、行)で行を印刷するとき、私の関数のconvertLine()です。それは私が望むものを正確に印刷します。しかし、私はこれをメインではなく、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がコールバイ値であることを理解していますが、次に、この関数の数値変数をメインで操作したときにどうやって表示されますか?また、内部の内容が変更され、異なる量のスペースを占める場合、なぜ私のライン配列のスペースを再配置するのが無意味なのでしょうか? – bodotheguy

+0

本当に 'c'の絶対的な基礎から始める必要があります。私はこのプログラムのすべてのエラーを説明する時間がありませんし、文字列リテラルと文字列を '=='で比較する誰かに、支払いなしで 'c'を書く方法を教えたいと思っていません。 – EOF

答えて

2

あなたの関数からprintf()free()を削除します。は、非malloc'edメモリブロックに由来する可能性があるため、free()realloc()は使用しないでください。 convertLine()main()から呼び出し、その後、line文字列の内容を印刷します。次に、文字列がmalloc/reallocを使用して割り当てられた場合は、文字列を再割り当ておよび/または解放することができます。

関連する問題