Array_Cut

Dieses Thema im Forum "C/C++" wurde erstellt von iverson702, 20.03.2006.

  1. #1 iverson702, 20.03.2006
    iverson702

    iverson702 Grünschnabel

    Dabei seit:
    20.03.2006
    Beiträge:
    6
    Zustimmungen:
    0
    Hallo zusammen,
    beim Ausführung folgender Code (Siehe unter), bekomme ich in meinem Array Liste char Liste[] = {1,21,333,433,54,12,33,45,56} den Wert 333 und 433 nicht auf dem Bildschirm gezeigt, sondern komische Werte.
    1- Wie kann ich, wenn ich in der main-Methode die Position i und j initialisiert habe, genau die Werte an der Stelle i bis j bekommen. (z.B: Wenn ich int i=1 und j=5 initialisiere, dann sollte ich folgende Werte bekommen:
    21 333 433 54 12 ?
    2- Wie kann ich die Werte an der Stelle i bis j in einem Array speichern und diese dann später mit return ausgeben?

    /* Array_Cut.c */
    #include <stdio.h>
    #include <stdlib.h>

    int Start_Cut; //Anfangbereich
    int End_Cut; //Endbereich
    char GetArrayCut ( char *Buffer, int Start , int End)
    {
    int k = ( End - Start ) + 1;
    char Ergebnis[k];
    int i ;
    for (i = Start ; i <= End; i++ )
    Ergebnis = Buffer;
    //return Ergebnis;
    for (i = Start; i<= End; i++)
    printf("%d ", Ergebnis);
    printf ("\n");
    }
    int main ()
    {
    Liste char Liste[] = {1,21,333,433,54,12,33,45,56};
    char i = 1 ;
    char j = 4;
    char *result = GetArrayCut ( Liste , i , j ) ;

    }
    Ween es möglich wäre, bitte schreibt der modifierte Code dazu.:(
    Besten Dank.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Andrea

    Andrea Routinier

    Dabei seit:
    01.12.2003
    Beiträge:
    418
    Zustimmungen:
    0
    Ort:
    Bielefeld
    Hallo,

    ich kann dir nicht 100% helfen, aber vielleicht ist das ein Ansatz... Du speicherst 3 Buchstaben in einen char, da darf aber nur einer rein?

    Du muesstest entweder jedes Zeichen einzeln speichern, oder strings benutzen...

    Andrea
     
  4. #3 hazelnoot, 21.03.2006
    hazelnoot

    hazelnoot www.mywm.dl.am

    Dabei seit:
    13.10.2005
    Beiträge:
    377
    Zustimmungen:
    0
    Ort:
    in Geiersberg
    hi!

    das erste problem bei der ausgabe am bildschirm ist ganz klar! ein char wert ist ein 1 byte wert in diesen passen nur werte von 0 bis 255! ansonsten fallen bits um!
    bsp:
    Code:
    #include <stdio.h>
    
    int main(void){
        char liste1B[] = {1,21,333,433,54,12,33,45,56}; /*ist ein array von 1byte werten (1byte = 0 ... 255)*/
        int liste4B[] = {1,21,333,433,54,12,33,45,56};/*ist ein array von 4byte werten (4byte = auf jeden fall genug platz :-)*/
        
        /*der test:*/
        /*ausgsbe der char liste als zahl*/
        int i;
        for(i = 0; i < sizeof(liste1B) / sizeof(char); i++)
            printf("%d ", liste1B[i]);
        printf("\n");
    
        /*ausgabe der int liste als zahl --- nun geht es*/
        for(i = 0; i < sizeof(liste4B) / sizeof(int); i++)
            printf("%d ", liste4B[i]);
        printf("\n");
    }
    
    fuerst du diesen code aus wirst du sehen dass es gehen wird!

    weiters hab ich noch einige aenderungen an deinem code vollzogen! die rueckgabe zum bsp: in c kann man keine arrays zurueckgeben! und eine referenz auf einen array zurueckgeben ist schlecht da nach dem beenden der methode dieser speicherbereich zum ueberschreiben freigegeben wird!
    weiters ist mich noch aufgefallen dass du in deinem ergebinsarray genauso reinschreibst wie du aus dem urspruenglichen liest das geht nicht da der ergebnisarray ja auch bei 0 anfaengt also musst du das auch beruecksichtigen!
    bsp:
    Code:
    /* Array_Cut.c */
    #include <stdio.h>
    #include <stdlib.h>
    
    int Start_Cut; //Anfangbereich
    int End_Cut; //Endbereich
    
    void GetArrayCut ( int *buffer, int *ergBuffer, int start , int end)
    {
        int k = ( end - start );
        int i, b;
        for (i = start, b = 0; i <= end; i++, b++)
            ergBuffer[b] = buffer[i]; /*ergebnisarray faengt bei 0 an!!*/
    
        for (i = 0; i <= k; i++)
            printf("%d ", ergBuffer[i]);
        printf("\n");
    }
    int main ()
    {
        int liste[] = {1,21,333,433,54,12,33,45,56};
    
        int i = 0;
        char start = 1 ;
        char end = 5;
    
        int result[ ((end-start)) ]; /*--> setze resultsize auf das maximal moegliche*/
        GetArrayCut ( liste, result, start , end ) ;
            
        for (i = 0; i <= (end-start); i++)
            printf("%d ", result[i]);
        printf("\n");
    }
    
     
  5. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn


    Ergebnis i ist char array, ich wess ja nicht was du haben willst aber entweder machst du aus Ergebnis einen integer oder du machst ein
    Code:
    printf("%s",Ergebnis[i]);
    
    dann mußt du aber Liste folgendermasßen intialisieren
    Code:
    Liste char Liste[] = {[b]"[/b]1[b]"[/b],[b]"[/b]21[b]"[/b],..
    
     
  6. #5 hazelnoot, 21.03.2006
    hazelnoot

    hazelnoot www.mywm.dl.am

    Dabei seit:
    13.10.2005
    Beiträge:
    377
    Zustimmungen:
    0
    Ort:
    in Geiersberg
    hi!

    @cremi
    ich versteh das nicht richtig was du meinst! das laesst sich doch garnich uebersetzen:
    Code:
    Liste char Liste[] = {"1","21"};
    
    da wirft er dir sicher sowas an den kopf wie Liste undeclared oder so! nicht?
    Code:
    char *Liste[] = {"1","21"};
    
    so waere es korrekt!
     
  7. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    stimmt mein fehler - habs aber so gemeint
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Array_Cut