char*[50][50] is incompatible with *(*)[50]



  • Hi,

    habe folgendes Szenario:

    char Dummy[50][50];
    SplitLineByBlank(&Dummy, pLine[LineIndex], -1, -1, 250);
    
    int SplitLineByBlank(char* Dummy[50][50], char* Line, int StartIndex, int EndIndex, int LineLength);
    

    Bei &Dummy gibt er mir nen Fehler aus:
    Argument of type char()[50][50] is incompatible with char (*)[50]

    Kann mir da jemand weiter helfen?

    Grüße,
    Jan



  • Wenn doch nur mal jemand std::string und std::vector erfinden würde...


  • Global Moderator

    Die eigentliche Antwort hat manni66 schon gegeben. In C++ willst du niemals Zeichenketten mit char Arrays machen, du möchtest niemals Arrays an Funktionen übergeben, du möchtest niemals mehrdimensionale Arrays schachteln, und so weiter. Such dir dringend ein gutes Lehrbuch für C++, nicht für C mit cout!

    Aber nur zur Erklärung, was bei dir schief ging:

    char* Dummy[50][50]
    

    Das sind 50 Arrays von 50 Arrays von Zeigern auf char. Du hast wahrscheinlich einen Zeiger auf 50 Arrays von 50 Arrays von char gemeint. Letzteres wäre

    char (*Dummy)[50][50]
    

    Damit wird es funktionieren, aber wie schon erwähnt, ist davon dringendst abzuraten!



  • Warum überhaupt eine Zeiger-Array-Array?

    Für C sollte

    SplitLineByBlank(Dummy, pLine[LineIndex], -1, -1, 250);
    
    int SplitLineByBlank(char Dummy[50][50], char* Line, int StartIndex, int EndIndex, int LineLength);
    

    reichen.



  • Zeiger (im C++ Jargon auch rohe C Zeiger genannt) gehören - wie man auch hier an den Antworten wieder sieht - nicht in C++ Hände:

    int SplitLineByBlank(char (*Dummy)[50][50], char* Line, int StartIndex, int EndIndex, int LineLength)
    {
    	printf("Zeigergröße:%zu Inhaltgröße:%zu", sizeof(Dummy),sizeof(*Dummy));
    	return 0;
    }
    
    int main()
    {
    	char Dummy[50][50]; 
    	SplitLineByBlank(&Dummy, 0, -1, -1, 250); 
    	return 0;
    }
    

    https://ideone.com/zk6WpV

    Ein Zeiger auf ein char[50][50]-Array ist inkompatibel (d.h. UB bei Dereferenzierung) zu einem Zeiger auf ein char*[50]-Array.