Funkionsparamter



  • Hi zusammen!

    Bei meinem unten stehenden Programm liefert die Variable "FAIndex" keinen Wert zurück. Weiß jemand wo der Fehler liegt?

    main.c

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    #include "header.h"
    #include "FuncCReadFile.h"
    #include "FuncCWriteFile.h"
    #include "FuncInputFileName.h"
    #include "FuncCrypt.h"
    #include "FuncCRandomPassword.h"
    #include "FuncEncrypt.h"
    int main() {
        char MainInputFileName[MaxIndex];
        char MainOutputFileName[MaxIndex];
        FuncInputFileName(MainInputFileName,MainOutputFileName);
        FuncCrypt(MainInputFileName,MainOutputFileName);
        FuncEncrypt(MainOutputFileName);
        return 0;
    }
    

    FuncCrypt.c

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    extern MaxIndex;
    extern SHIFT;
    int FuncCrypt(char FDInputName[MaxIndex], char FDOutputName[MaxIndex]) {
        char FDCArray[MaxIndex];
        unsigned long long FDLL=0;
        int FDIndex=0;
        int FDLoop=0;
        int FDITmp;
        int FDPassword[MaxIndex];
        FuncCReadFile(FDInputName,FDCArray,FDLL,FDIndex);
        printf("\n");
        printf("%i",FDIndex);
        FuncCRandomPassword(FDPassword);
        for(FDLoop=0;FDLoop<=FDIndex;++FDLoop) {
            FDITmp=(int)FDCArray[FDLoop];
            FDITmp=FDITmp+FDPassword[FDLoop];
            if(FDITmp>SHIFT) {
                FDITmp=FDITmp-SHIFT;
            }
            FDCArray[FDLoop]=(char)FDITmp;
        }
        FuncCWriteFile(FDOutputName,FDCArray, FDIndex);
    }
    

    FuncCReadFile.c

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    extern MaxIndex;
    int FuncCReadFile(char FAFileName[MaxIndex], char FACArray[MaxIndex], unsigned long long FAFilePoint, int FAIndex) {
        FILE *FuncCReadFileFile;
        int FAITmp=0;
        FAIndex=0;
        printf("%s","Input File\n");
        FuncCReadFileFile = fopen (FAFileName, "rb");
        fseek(FuncCReadFileFile, FAFilePoint, SEEK_SET);
        if(FuncCReadFileFile == NULL) {
            printf("file can not open.\n");
        } else {
            while((FAITmp = fgetc(FuncCReadFileFile))!=EOF) {
                /*
                printf("%c", ITmp);
                */
                FACArray[FAIndex]=FAITmp;
                ++FAIndex;
            }
        }
        fclose (FuncCReadFileFile);
        printf("%i",FAIndex);
    }
    

    P.S. Datei "FuncCrypt.h" enthält öediglich folgenden Inhlt

    int FuncCReadFile();
    

    Jede andere Datei die per #include (*.h) hat entsprechend der jeweiligen Funktionsnamen den gleichen Inhalt.

    Danke



  • Dies ist hoffnungslos.



  • fseek verlangt als 2. Parameter long int, du übergibst fehlerhaft unsigned long long.
    Du verwendest VLA, das ist ebenso Schrott wie implicit int, was in C99 sowieso verboten ist.
    Werfe 90% deiner Variablen weg, benenne die Variablen nach einem vernünftigen Schema, formatiere vernünftig und schon hast du einen besseren Überblick.
    fclose rufst du auch im Fehlerfall auf, was Unsinn ist, ebenso ist ein Prototyp wie

    int FuncCReadFile();
    

    völliger Nonsens.



  • Danke für die Antworten:

    Nach Überarbeitung des Codes besteht der Fehler immer noch:

    main.c

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    const int MaxIndex=1000;
    const int SHIFT=256;
    
    #include "FuncCReadFile.h"
    #include "FuncCWriteFile.h"
    #include "FuncCrypt.h"
    #include "FuncEncrypt.h"
    
    void main() {
    
        int MI=0;
    
        char MC[MaxIndex];
    
        printf("choice");
        printf("\n");
        printf("1 - Crypt");
        printf("\n");
        printf("2 - Encrypt");
        printf("\n");
    
        for(MI=0;MI<=3;++MI) {
    
            MI=0;
    
            scanf("%s",MC);
    
            if(MC[0]=='1') {
    
                printf("Crypt\n");
    
                FuncCrypt();
    
                MI=4;
    
            }
    
            if(MC=="2") {
    
                FuncEncrypt();
    
                MI=4;
    
            }
    
        }
    
        getchar();
    
    }
    

    FuncCrypt.c

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    extern MaxIndex;
    
    void FuncCrypt() {
    
        char FileNameA[MaxIndex];
        char FileNameB[MaxIndex];
        char FCC[MaxIndex];
    
        unsigned long int FULIA=0;
    
        int FID=0;
    
        FuncInputFileName(FileNameA,FileNameB);
    
        FuncCReadFile(FileNameA,FCC,FULIA,FID);
    
        printf("%i",FID);
    
    }
    

    FuncCReadFile.c

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    extern MaxIndex;
    
    void FuncCReadFile(char FCA[MaxIndex], char FCB[MaxIndex], unsigned long int FLIA, int FIA) {
    
        FILE *FFileA;
    
        int FIB=0;
        FIA=0;
    
        printf("%s","Input File\n");
    
        FFileA = fopen (FCA, "rb");
    
        fseek(FFileA, FLIA, SEEK_SET);
    
        if(FFileA == NULL) {
    
            printf("file can not open.\n");
    
        } else {
    
            while((FIB = fgetc(FFileA))!=EOF) {
    
                /*
    
                printf("%c", ITmp);
    
                */
    
                FCB[FIA]=FIB;
                ++FIA;
    
            }
    
        }
    
        fclose (FFileA);
    
        printf("%i",FIA);
        printf("\n");
    
    }
    


  • #include <stdio.h>
    
    void foo(int a)
    {
    	a = 5;
    }
    
    int main()
    {
    	int b = 0;
    	foo(b);
    	printf("%i\n", b);
    
    	return 0;
    }
    

    Warum wird hier 0 und nicht 5 ausgegeben?
    int a ist eine Kopie von b . Es enthält den gleichen Wert, aber in einer anderen Variable. Die Variable a existiert nur in der Funktion foo , danach nichtmehr.

    Vielleicht solltest du dir mal ein Grundlagenbuch zu Gemüte führen. 😉



  • C Neuling schrieb:

    Danke Bei meinem unten stehenden Programm liefert die Variable "FAIndex" keinen Wert zurück. Weiß jemand wo der Fehler liegt?

    C Neuling schrieb:

    Danke für die Antworten:
    Nach Überarbeitung des Codes besteht der Fehler immer noch:

    Das ist nicht verwunderlich, da FAIndex in dem neuen Code gar nicht mehr vorkommt.

    FAIndex ist eine Variale, die hat einen Wert.

    Funktionen können Werte zurück liefern. Dafür gibt es den Rückgabewert.

    Falls du der Meinung bist, der Wert von FID müsste sich beim Aufruf von FuncCReadFile(FileNameA,FCC,FULIA,FID); ändern, da du den auch in FuncCReadFile änderst, liegst du falsch.

    Die Parameter einer Funktion werden als Kopie übergeben (Ausnahme sind Arrays, wo die Anfangsadresse übergeben wird)


Log in to reply