Problem mit Konvertierung von TCHAR ** in TCHAR[][]



  • ich habe hier folgenden code. leider kann ich nicht ganz nachvollziehen warum mir der compiler den folgenden fehler ausspuckt. schließlich sollte ihm doch egal sein wie groß meine arrays sind, oder etwa nicht? wie kann ich den code so bearbeiten, dass ich in meiner funktionsdeklaration keine festen arraygrößen angeben muss? (gebe ich feste größen vor tut es nämlich 😞 )

    der compiler schlägt ein reinterpreter_cast vor, dies halte ich aber für sehr unsauber. wenn möglich bitte helfen, komme selbst nicht weiter.

    1>c:\vs2008\test\test.cpp(117) : error C2664: 'getProxyServers': Konvertierung des Parameters 1 von 'TCHAR **' in 'TCHAR [][256]' nicht möglich

    void getProxyServers(TCHAR **szProxy)
    {	
    	//anderer code	
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	TCHAR szResult[20][256] = { 0 };
    
    	getProxyServers(szResult);
    
    	_getch();
    
    	return 0;
    }
    

    Gruß
    ti83plus



  • Probier mal

    getProxyServers(&szResult[0][0]);
    

  • Administrator

    Ein Zeiger auf einen Zeiger ist ungleich einem 2D Array. Die Elemente von einem 2D Array liegen immer noch hintereinander im Speicher, ein normaler Zeiger mit Breite- und Längeangabe reicht daher.

    #include <iostream>
    
    void print(int* arr, int width, int height)
    {
    	for(int y = 0; y < height; ++y)
    	{
    		for(int x = 0; x < width; ++x)
    		{
    			std::cout << arr[y + x * height] << ' ';
    		}
    
    		std::cout << '\n';
    	}
    
    	std::cout << std::flush;
    }
    
    int main()
    {
    	int arr[4][10] = { 0 };
    	arr[0][4] = 1;
    	arr[1][0] = 1;
    
    	print(&arr[0][0], 4, 10);
    
    	return 0;
    }
    

    Grüssli


Anmelden zum Antworten