char [] [] und char** problem



  • Hi Leute,
    bin auf ein kleines Problem gestoßen und hoffe nun, dass mir hier einer helfen kann.
    Hier ein kleines Testprogramm, dass das Problem vereinfacht darstellt:

    void test(char** feld)
    {
    	for(int i=0;i<6;++i)
    	{
    		for(int j=0;j<6;++j)
    		{
    			printf("%s",feld[i][j]);
    		}
    	}
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char feld[6][6];
    	for(int i=0;i<6;++i)
    	{
    		for(int j=0;j<6;++j)
    		{
    			feld[i][j] = '0';
    		}
    	}
    	test((char**)feld)
    }
    

    Beim Ausführen stürzt das ganze ab, weil es einen Lesefehler hat.

    wenn ich den Aufruf von "test" ohne cast auf char** mache, bekomme ich folgende Fehlermeldung:

    error C2664: 'test' : cannot convert parameter 1 from 'char [6][6]' to 'char **'
    

    Ich dachte eigentlich dass ein Feldzeiger vom Typ datentyp* ist(analog dann auch ein char[][] ein char** ist).
    Kennt jemand den Fehler, oder hat vllt sogar nen Lösungsweg?

    Gruß
    Andi



  • void test(char (*feld)[6])
    {
        for(int i=0;i<6;++i)
        {
            for(int j=0;j<6;++j)
            {
                printf("%c",feld[i][j]);
            }
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        char feld[6][6];
    
    	for(int i=0;i<6;++i)
        {
            for(int j=0;j<6;++j)
            {
                feld[i][j] = '0';
            }
        }
        test(feld);
    }
    

    Jetzt wird 36 mal '0' ausgegeben ! 😃

    Gruss



  • void test(char* feld) 
    { 
        for(int i=0;i<6;++i) 
        { 
            for(int j=0;j<6;++j) 
            { 
                printf("%c", *(feld+(i*6+j))); 
            } 
        } 
    } 
    
    int main(int argc, char* argv[]) 
    { 
        char feld[6][6]; 
        char count = 'A';
        for(int i=0;i<6;++i) 
        { 
            for(int j=0;j<6;++j) 
            { 
                feld[i][j] = count++; 
            } 
        } 
        test(feld[0]); 
    }
    


  • typedef char feld_t[6][6];
    
    void test (feld_t feld)
    {
        int i;
        for(i=0;i<6;++i)
        {
            int j;
            for(j=0;j<6;++j)
            {
                printf("%d\n", feld[i][j]);
            }
        }
    }
    
    int main(int argc, char* argv[])
    {
        feld_t feld;
        int i;
    
        for(i=0;i<6;++i)
        {
            int j;
            for(j=0;j<6;++j)
            {
                feld[i][j] = j+6*i;
            }
        }
        test (feld);
    }
    

    🙂



  • Vielen Dank für die Antworten. Vorallem die Möglichkeit mit dem Typedef finde ich sehr schön.



  • Andi_S schrieb:

    Vorallem die Möglichkeit mit dem Typedef finde ich sehr schön.

    du kannst auch noch die hardcodierten konstanten aus dem code rausschmeissen:

    typedef long feld_t[12][8];
    #define FELDX(f) (sizeof(feld_t)/sizeof(f[0])) 
    #define FELDY(f) (sizeof(f[0])/sizeof(f[0][0]))
    
    void test (feld_t feld)
    {
        int i;
    
        for(i=0;i<FELDX(feld);++i)
        {
            int j;
            for(j=0;j<FELDY(feld);++j)
            {
                printf("%d\n", feld[i][j]);
            }
        }
    }
    
    int main(int argc, char* argv[])
    {
        feld_t feld;
        int i;
    
        for(i=0;i<FELDX(feld);++i)
        {
            int j;
            for(j=0;j<FELDY(feld);++j)
            {
                feld[i][j] = j+FELDX(feld)*i;
            }
        }
        test (feld);
    }
    

    🙂


Anmelden zum Antworten