memcmp Rückgabewert - Arrays vergleichen



  • int sameEnds(int a[], int n, int cnt)
    {
    	int h1[n];
    	int h2[n];
    	int gleich;
    
    	for (int i=0; i<n; i++) 
    	{
    		h1[i] = a[i];
    	}
    
    	for (int i=cnt-n; i<cnt; i++) 
    	{
    		h2[i] = a[i];
    	}
    
    	gleich = memcmp(h1,h2,sizeof(h1));
    //...
    
    }
    

    In gleich steht nach memcmp der Inhalt von h1[0]. Warum gibt er mir keine 0 zurück, wenn beide Arrays die gleichen Zahlen enthalten? Liegt das daran, weil die Arrays mit Größe n angelegt wurden? Gibt es dafür eine Lösung?

    Danke.


  • Mod

    Norben schrieb:

    Warum gibt er mir keine 0 zurück, wenn beide Arrays die gleichen Zahlen enthalten?

    Weil sie nicht die gleichen Zahlen enthalten? Wie kommst du denn da drauf, dass es so wäre, wenn du wenige Zeilen vorher was anderes reinschreibst? Zumal du höchstwahrscheinlich sowieso über die Arraygrenzen hinweg schreibst, was ein noch viel größeres Problem sein dürfte.



  • Wenn z.B. n=2 übergeben wird, soll er von dem übergebenen Array die ersten 2 Stellen nehmen und in h1 speichern und die letzten 2 Stellen nehmen und in h2 speichern. Diese beiden Arrays (h1 und h2) wollte ich dann vergleichen.


  • Mod

    Norben schrieb:

    Wenn z.B. n=2 übergeben wird, soll er von dem übergebenen Array die ersten 2 Stellen nehmen und in h1 speichern und die letzten 2 Stellen nehmen und in h2 speichern. Diese beiden Arrays (h1 und h2) wollte ich dann vergleichen.

    Dann musst du h2 aber anders füllen. Oder viel besser: Wieso überhaupt kopieren? Die Daten sind doch schon da und können direkt verglichen werden.



  • Naja, mit:

    for (int i=cnt-n; i<cnt; i++) 
        { 
            h2[i] = a[i]; 
        }
    

    ...schreibe ich ja die vorletzte und letzte Stelle vom übergebenen Array in h2.

    Übergebe ich {5, 6, 45, 99, 13, 5, 6} müsste das ja passen?



  • Norben schrieb:

    Naja, mit:

    for (int i=cnt-n; i<cnt; i++) 
        { 
            h2[i] = a[i]; 
        }
    

    ...schreibe ich ja die vorletzte und letzte Stelle vom übergebenen Array in h2.

    Und an welche Stelle?



  • Norben schrieb:

    int sameEnds(int a[], int n, int cnt)
    {
    	int h1[n];
    	int h2[n];
    	int gleich;
    
    	for (int i=0; i<n; i++) 
    	{
    		h1[i] = a[i];
    	}
    	
    	for (int i=cnt-n; i<cnt; i++) 
    	{
    		h2[i] = a[i];
    	}
    	
    	gleich = memcmp(h1,h2,sizeof(h1));
    //...
    
    }
    

    In gleich steht nach memcmp der Inhalt von h1[0]. Warum gibt er mir keine 0 zurück, wenn beide Arrays die gleichen Zahlen enthalten? Liegt das daran, weil die Arrays mit Größe n angelegt wurden? Gibt es dafür eine Lösung?

    Danke.

    Wie schon "Furble Wurble" geschrieben hat, ist die Berechnung von h2 fehlerhaft. Du benutzt für h2 den falschen Index. Da darfst Du nicht den selben nehmen wie für a.

    Warum kopierst Du aber die Daten? Was spricht gegen:

    gleich = memcmp( a, a+cnt-n, sizeof( int )*n );
    

    mfg Martin


Log in to reply