Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » chararray übergeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.01.2005, 17:00 Uhr
~burgerking
Gast


hallo

habe folgende 4 funktionen:


C++:
void Eingabe(){    
    char *tmp="hallO";
    Funktion(tmp);
}

void Funktion(char *text){    
    Ausgabe(OptionAuswahl(),text);
}

void Ausgabe(int option,char *text){
    if(option==1){  
        printf("%s",text);
    }
}

int OptionAuswahl(){
    return option;
}



In Eingabe wird ein Charray bestimmt, der an "Funktion" übergeben wird, in der durch "OptionAuswahl" ein int wert ermittelt wird.. problem ist, dass mein charraray leer wird, sobald ich "OptionAuswahl" aufrufe. In der "Ausgabe" gibt er demnach für printf("%s",text) nichts aus...
Wenn ich "OptionAuswahl" wegfallen lasse und zB einen festen Wert einsetze wird der richtige CharArray übergeben...
Was mache ich falsch? Wie kann ich es richtig machen ?
TIA

mfg, burgerking
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.01.2005, 17:07 Uhr
Pablo
Supertux
(Operator)



C++:
int OptionAuswahl(){
    return option;
}



kann nicht gehen, weil option in OptionAuswahl nicht deklariert ist. Oder ist option global?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.01.2005, 17:09 Uhr
~burgerking
Gast


also es fehtl ne mengr code... option ist in Optionauswahl deklariert und Optionauswahl funktioniert richtig...sobald ich aber auf Optionauswahl zugreife/ausführe "vergisst" er meinen charraray
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.01.2005, 17:34 Uhr
Pablo
Supertux
(Operator)


Dann poste den Code, denn so wie du es gemacht hast, ist richtig.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.01.2005, 18:35 Uhr
~burgerking
Gast


ok, ich habs ein bisschen vereinfacht, wär sonst zuviel code aber problem bleibt gleich:



C++:
int OptionAuswahl(int MaxOpt,char *eingabe){
    
    int option;
    
    printf("\n\n%s",eingabe);
    scanf("%d",&option);
    
    while( option<=0 || option>MaxOpt){
         printf("\n\n%s",eingabe);
         scanf("%d",&option);
    }    
    
    return option;
}    

int main() {

  int option=OptionAuswahl(2,"\n\n\t [1] Manuelle Texteingabe \n\t [2] Text aus Datei");
  char *TmpArray;
    
  TmpArray=open("blub.txt");  
  if(option==2) {      
      
    printf("\n\n%s",TmpArray);  /*erste Ausgabe */
  
    option=OptionAuswahl(2,"\n\n\t [1] Text codieren \n\t [2] Text decodieren");
    
    printf("\n\n%s",TmpArray);   /*zweite Ausgabe */
      
        
  }  





Bei der ersten Ausgabe gibt er TmpArray richtig aus (Inhalt von Datei)
Bei der zweiten Ausgabe, nachdem OptionAuswahl ausgeführt wurde, gibt er nichts mehr aus... TmpArray ist null...
Wieso? und viel wichtiger.. was muss ich anders machen?

mfg. BurgerKing

Dieser Post wurde am 22.01.2005 um 18:57 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.01.2005, 18:59 Uhr
Pablo
Supertux
(Operator)


Angenommen, dass open(char*); richtig funktioniert, sehe ich keinen Fehler. Zeig mal deine open Funktion.

Optionauswahl schrieb lieber so:


C++:
int OptionAuswahl(int MaxOpt,char *eingabe){
    
    int option=0;
    while( option<=0 || option>MaxOpt){
         printf("\n\n%s",eingabe);
         scanf("%d",&option);
    }    
    
    return option;
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.01.2005, 19:06 Uhr
~burgerking
Gast



C++:

char *open(char *dateiname){  

  char text[1000];
  char zeile[100];
  FILE *datei;  
  
  datei=fopen(dateiname,"r+");
  
  if (datei == NULL ) {            
      printf ("\n\n\tFehler: Datei konnte nicht geoeffnet werden!\n");  
  }
  else {      
      while(fgets(zeile,255,datei)!=NULL){
          strcat(text,zeile);                  
      }    
      fclose (datei);      
  }  
  return text;    
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.01.2005, 01:31 Uhr
mmc20
puss in boots


hi, also ich bin zwar nicht gerade der grosse C-held, aber du übergibst aus deiner open() einen pointer auf ein objekt (text[]) welches beim verlassen der funktion nicht mehr existiert. dh. der speicher wohl noch den inhalt hat, aber freigegeben wurde und warscheinlich durch andere funktionen wieder benutzt/überschrieben wird.

besser wäre es der funktion eine referenz deines TmpArray mitzugeben, also in etwa so

C++:
bool open(char *dateiname, char &text)
{
  char zeile[100];
  FILE *datei;  
  
  datei=fopen(dateiname,"r+");
  
  if (datei == NULL ) {            
      printf ("\n\n\tFehler: Datei konnte nicht geoeffnet werden!\n");
      fclose (datei);        
      return FALSE;  
  }

  while(fgets(zeile,255,datei)!=NULL)
      strcat(text,zeile);

  fclose (datei);        
  return TRUE;    
}

// im main
  char TmpArray[1024];
...
  if ( open("blub.txt", &TmpArray) ) {
     // öffnen war erfolgreich --> daten verarbeiten
  } else {
     // fehlerauswertung
  }
...


mit dem rückgabewert kannst' jetzt noch testen ob das öffnen der datei erfolgreich war, bevor du die daten im TmpArray verwendest.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: