Übergabe eines "Teil"-Arrays an Unterfunktion möglich?



  • Hallo,

    nehmen wir mal an ich möchte ein Array an eine Unterfunktion übergeben. Ist es möglich nur bspw. 2 bestimmte Stellen im Array (z.B. a[2] und a[3]) zu übergeben ohne ein "Zwischen-Array" zu verwenden?

    Gruß



  • Mir tut sich noch eine weitere Frage auf. Wie kann ich den Überlauf eines Arrays feststellen, d.h. entsprechend behandeln?

    Beispiel:

    char array[5];
    
    strcpy(array, "abcdefghijklmnopqrstuvwxyz");
    
    printf("%s\n", array);
    

    Der Compiler würde an dieser Stelle einen Segmentation Fault melden. Wie kann ich diesen abfangen ohne ein weiteres Array verwenden zu müssen? Ich dachte da an etwas wie sizeof, was aber in diesem Fall unpassend ist.



  • Zu erstens: Du kannst auch Zeiger auf die betroffenen Array-Elemente übergeben:

    int Array[100];
    func(&Array[2],2);
    

    Zu zweitens: Die Überläufe mußt du schon selber abfangen - strcpy() sieht nur einen Zeiger und hat keine Möglichkeit herauszufinden, wieviel Platz dort ist. Am besten du benutzt dafür die strncpy() und übergibst ihr die Größe des Arrays (denk dran, daß du noch einen Platz für den Null-Terminator freilassen mußt).



  • ElephantMan schrieb:

    Der Compiler würde an dieser Stelle einen Segmentation Fault melden. Wie kann ich diesen abfangen ohne ein weiteres Array verwenden zu müssen? Ich dachte da an etwas wie sizeof, was aber in diesem Fall unpassend ist.

    Wieso? Sizeof ist in dem Fall genau richtig:

    char array[5];
    
    if (strlen("abcdefghijklmnopqrstuvwxyz") + 1 < sizeof array)
        strcpy(array, "abcdefghijklmnopqrstuvwxyz");
    
    printf("%s\n", array);
    

    Allerdings gilt das an dieser Stelle nur für echte Arrays. Sobald Du einen Zeiger hast, der auf ein Array zeigt, kann die Länge nicht mehr ermittelt werden. In solchem Fall musst Du die Länge in einer Variablen speichern, solang Du noch ein Array hast, und diese Länge mit an die entsprechenden Funktionen übergeben.

    Wenn Du einzelne Elemente an die Unterfunktion übergeben willst, tu das doch. Du brauchst nur zwei Parameter, die vom Typ eines Array-Elements sind.



  • Gibt es die Möglichkeit diesen Test auch bei zusammengesetzten Zeichenketten durchzuführen ohne ein Array zum zwischenspeichern zu verwenden? Ich möchte mit Hilfe von strcpy und strcat eine beliebige Zeichenkette zusammensetzen und bevor diese in mein char-Array kommt eben prüfen ob es dort hineinpasst.

    Beispiel:

    char array[10];
    char n[6]="hallo";
    char m[5]="echo";
    
    if (Zeichenkettenlänge von (n+m) + 1 > sizeof array) {
       strcpy(array, n);
       strcat(array, m);
    


  • Ich kann mir nicht helfen, aber irgendwie möchte ich antworten "Ja, Du kannst Zeichenkettenlänge(m+n) auch als Zeichenkettenlänge(m)+Zeichenkettenlänge(n) ausdrücken". (Die Größe bekommst Du wie gesagt bei Arrays mit sizeof oder bei Zeigern-auf-char mit strlen)

    Wo ist das Problem? Du kennst doch die Längen der Eingabedaten, rechne diese zusammen und prüfe ob alles zusammen die Größe des Arrays nicht überschreitet...



  • Die Länge des Summenstrings ist gleich der Summe der TeilLängen, also:

    if(strlen(n)+strlen(m)+1 < sizeof(array))
      ...
    

    @LordJaxom: Kann es sein, daß du den Vergleichsoperator falschrum verwendet hast?



  • CStoll schrieb:

    @LordJaxom: Kann es sein, daß du den Vergleichsoperator falschrum verwendet hast?

    Hups, ich? Nein, quatsch *flöt*

    Hab's oben korrigiert, danke für den Hinweis 😉


Anmelden zum Antworten