Char-Array aus UnterProgramm an main übergeben!?!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Char-Array aus UnterProgramm an main übergeben!?!

    Hallöchen...
    Also erst mal vorneweg: Ich bin Anfänger... daher bitte ich mich für etwaige Fauxpas nicht zu lünchen ^^
    Ich habe gerade angefangen Informatik zu studieren und die mittlerweile dritte praktische Aufgabe stellt ein Programm zu Kodierung/Dekodierung von Textnachrichten dar.
    Das Programm soll 3 Funktionen Haben
    1. Text Kodieren
    2. Text Dekodieren
    3. Text testDekodieren

    Daher dachte ich mir wäre es sinnvoll auch 3 Funktionen zu nutzen... man möge mich korrigieren wenn nötig.
    So entstanden encode() decode() und testdecode()
    Nun zum eigentlichen Problem:
    Um testdecode() betreiben zu können brauche ich 4 Variablen aus der encode().
    3 davon sind einfache int, die ich mittels pointer an main() übergeben und von da aus an testdecode() weitergeleitet habe.
    Nummer 4 jedoch ist ein Char-Array. Ich habe leider keine Ahnung wie ich dieses in die main() bekommen soll... pointer-Geschichten haben bisher nicht funktioniert.
    Wie gesagt ich bin Neuling auf dem Bereich. Hier mal die wesentlichen Dinge aus dem Code:

    Quellcode

    1. int encode(int* ptshift, int* ptZeilen, int* ptSpalten)
    2. {
    3. char dummy[81];
    4. char Feld[15][15];
    5. char Text[80];
    6. unsigned char RueckgewandelterWert[80];
    7. unsigned char TextEncode[80];
    8. int UmkodierterWert[80];
    9. int VerschobenerWert[80];
    10. int shift;
    11. int i=0;
    12. int ispalten;
    13. int izeilen;
    14. int Anzahl;
    15. int sAnz=0;
    16. int zAnz=1;
    17. ...
    18. printf("\nErgebnis Kodierstufe 2: Kodezahl (ShiftZeilenSpalten) : ");
    19. printf("%02d%02d%02d\n->",shift,zAnz,sAnz);
    20. *ptshift = shift;
    21. *ptZeilen = zAnz;
    22. *ptSpalten = sAnz;
    23. ...
    24. i = 0;
    25. for ( izeilen = 0; izeilen < 15; izeilen++ ) {
    26. for ( ispalten = 0; ispalten < 15; ispalten++ ) {
    27. if ( Feld[izeilen][ispalten] != '~' ) {
    28. TextEncode[i] = Feld[izeilen][ispalten];
    29. i++;
    30. }
    31. }
    32. }
    33. printf("%s<-",TextEncode);
    34. gets(dummy);
    35. return 0;
    36. }
    37. int decode()
    38. {
    39. char dummy[80];
    40. char Feld[15][15];
    41. char TextEncode[80];
    42. ...
    43. ...
    44. gets(dummy);
    45. return 0;
    46. }
    47. int testdecode(int shift,int Zeilen,int Spalten)
    48. {
    49. char dummy[81];
    50. printf("%02d%02d%02d",shift,Zeilen,Spalten);
    51. gets(dummy);
    52. }
    53. int main(void)
    54. {
    55. char dummy[81];
    56. char modus;
    57. int shift;
    58. int Zeilen;
    59. int Spalten;
    60. do {
    61. clrscr();
    62. ...
    63. scanf("%c",&modus);
    64. gets(dummy);
    65. if (modus == 'K' || modus == 'k') encode(&shift,&Zeilen,&Spalten);
    66. else if (modus == 'D' || modus == 'd') decode();
    67. else if (modus == 'T' || modus == 't') testdecode(shift,Zeilen,Spalten);
    68. } while (modus != 'E' && modus != 'e');
    69. return 0;
    70. }
    Alles anzeigen


    Was ich nun Brauche ist im Grunde der Inhalt von TextEncode aus der encode() über main() in testdecode().
    Ich hoffe irgendwer kann mir helfen...

    MfG und reichlich Dank im Voraus, Jan.
    (Und bitte nicht gleich Killen... also mich ;-))
  • Hoffe der Link hilft:
    wer-weiss-was.de/theme158/article3515998.html

    Hier der Quelltext aufbereitet:

    Quellcode

    1. #include <stdio.h>
    2. #include <string.h>
    3. const char ( *funktion_gib_array() ) [40][40]
    4. {
    5. static char a_versteckt[40][40];
    6. memset(a_versteckt, 'A', sizeof(a_versteckt));
    7. return &a_versteckt;
    8. }
    9. int main()
    10. {
    11. int x,y;
    12. const char (*array)[40][40];
    13. array = funktion_gib_array();
    14. for (y=0; y<40; y++)
    15. {
    16. putchar( '\n' );
    17. for (x=0; x<40; x++)
    18. {
    19. putchar( (*array)[y][x] );
    20. }
    21. }
    22. return 0;
    23. }
    Alles anzeigen


    MfG bcc-fan
  • Ich hab da noch mal was versucht.
    Damit habe ich es zumindest hinbekommen einen Char aus dem String in die andere Unterfunktion zu bringen.
    Vielleicht kann mir jemand von da an helfen die restlichen Teile zu bekommen.
    Hier mal der Code:

    Quellcode

    1. int encode(..., char* ptTextArr)
    2. {
    3. ...
    4. i = 0;
    5. for ( izeilen = 0; izeilen < 15; izeilen++ ) {
    6. for ( ispalten = 0; ispalten < 15; ispalten++ ) {
    7. if ( Feld[izeilen][ispalten] != '~' ) {
    8. TextEncode[i] = Feld[izeilen][ispalten];
    9. i++;
    10. }
    11. }
    12. }
    13. TextEncode[Anzahl] = '\0';
    14. printf("%s<-",TextEncode);
    15. *ptTextArr = TextEncode[0];
    16. gets(dummy);
    17. return 0;
    18. }
    19. int decode()
    20. {
    21. ...
    22. }
    23. int testdecode(int shift,int Zeilen,int Spalten,char TextArr)
    24. {
    25. char dummy[81];
    26. printf("%02d%02d%02d%c",shift,Zeilen,Spalten,TextArr);
    27. gets(dummy);
    28. }
    29. int main(void)
    30. {
    31. char dummy[81];
    32. char modus;
    33. int shift;
    34. int Zeilen;
    35. int Spalten;
    36. char TextArr;
    37. do {
    38. clrscr();
    39. ...
    40. scanf("%c",&modus);
    41. gets(dummy);
    42. if (modus == 'K' || modus == 'k') encode(&shift,&Zeilen,&Spalten,&TextArr);
    43. else if (modus == 'D' || modus == 'd') decode();
    44. else if (modus == 'T' || modus == 't') testdecode(shift,Zeilen,Spalten,TextArr);
    45. } while (modus != 'E' && modus != 'e');
    46. return 0;
    47. }
    Alles anzeigen


    MfG, Jan.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von nevermind10844 ()

  • Was beinhaltet die Aufgabe?
    Soll dein Programm die Eingaben annehmen und in eine Datei schreiben oder im Speicher verwalten?

    Soweit ich sowas aufteilen würde müsste die Codierung unabhängig von der Decodierung sein.
    Ja klar Codierung und Decodierung müssen zueinander passen, aber einzeln arbeiten können.
    Also sollten auch möglichst keine Daten/Texte zwischen den Funktionen transferiert werden.
    Oder verlangt die Aufgabe einen entsprechenden Datentransfer?

    Aber ich kenne werder euren Lehrbeauftragten noch die Aufgabe. Ausserdem, wenn du dieses
    oder irgend ein anderes Programmierforum gefunden hast, meinst du es ist klug um delailierte
    Lösungen nach zu fragen? Dazu stehen dem Lehrpersonal entsprechende Suchmaschienen
    zur Verfügung ;)

    Also Komplettlösung von meiner Seite - nein.
    Hilfe zu speziellen Problemen wie bei deiner ersten Anfrage oder ähnlich - ja.

    MfG bcc-fan
  • ... huhu
    Nun ja ich frage ja nun auch definitiv nicht nach einer komplettlösung... alles andere steht ja schon. nur diese eine sache will mir nicht gelingen.
    Ich bin ja sogar scharf drauf das selber zu machen, weil es macht mir einfach spass. bisher wars erfolgreich und ich bemühe mich, das es so bleibt ...
    Ich bekomme einfach den einen String nicht aus einer Funktion in die andere.
    Und diverse Versuche sind bisher gescheitert.
    im grundsatz sind 2 dinge gefordert
    Kodieren und dekodieren
    beides mit Eingabe der entsprechenden daten in die Funktionen via Tastatur.
    Zusätzlich soll jedoch, praktisch zum testen, eine Weitere Funktion folgende aufgabe erfüllen:
    das ergebnis der kodier funktion soll als eingabe der dekodierfunktion fungieren..
    Da jedoch die dekodier funktion in seiner ausgabe von der testdekodierfunktion differiert, brauch ich also diese dritte funktion.

    Das ergebnis der Kodierfunktion ist ein Char-Array mit max 80 Zeichen inhalt (eindimensional).
    und genau dieses Ergebnis brauche ich in dieser dritten Funktion.
    der übertrag jedoch will leider nicht gelingen.
    Da liegt der Hund begraben. ^^

    MfG, Jan.
  • Leider komm ich auch damit nicht weiter. -.-
    Ich hab allerdings das hier mal gebaut:

    Quellcode

    1. void blub(char **ppcUP)
    2. {
    3. char dummy[81];
    4. *ppcUP = (char*) calloc(81, sizeof(char));
    5. gets(*ppcUP);
    6. }
    7. int main(void)
    8. {
    9. char dummy[81];
    10. char* pcMA;
    11. blub( &pcMA );
    12. puts(pcMA);
    13. gets(dummy);
    14. return 0;
    15. }
    Alles anzeigen

    Soweit so gut.... Aber:
    Es gibt einen Unterschied zu meinem Code, ich lese die Variable nicht via gets(*ppcUP) ein sondern habe ja ein Array das ich durch ein paar for schleifen voher belegt habe.
    Genau dadurch scheint das nicht mehr zu funktionieren -.-
    Ich habs anfängermäßig mal so versucht:

    Quellcode

    1. int encode(int* ptshift, int* ptZeilen, int* ptSpalten, char** ptTextArr)
    2. {
    3. char dummy[81];
    4. char Feld[15][15];
    5. char Text[80];
    6. char RueckgewandelterWert[80];
    7. char TextEncode[80];
    8. ...
    9. ...
    10. i = 0;
    11. *ptTextArr = (char*) calloc( 81, sizeof(char));
    12. for ( izeilen = 0; izeilen < 15; izeilen++ ) {
    13. for ( ispalten = 0; ispalten < 15; ispalten++ ) {
    14. if ( Feld[izeilen][ispalten] != '~' ) {
    15. TextEncode[i] = Feld[izeilen][ispalten];
    16. i++;
    17. }
    18. }
    19. }
    20. printf("%s<-",TextEncode);
    21. *ptTextArr = TextEncode;
    22. gets(dummy);
    23. return 0;
    24. }
    Alles anzeigen

    Aufruf in der Main:

    Quellcode

    1. encode(&shift,&Zeilen,&Spalten,&TextArr);

    Leider gibt er statt des Strings immer nur ein "c" aus wenn ich puts(TextArr); mache :(
    Ich denke halt es liegt an der art wie die Variable eingelesen wird.

    Wär suuuuper wenn man das npch gelöst bekäme

    MfG, Jan.
  • Hey... Ich danke vielmals... habs rausbekommen...
    man bin ich Happy...
    wens interessiert:

    Quellcode

    1. int encode(int* ptshift, int* ptZeilen, int* ptSpalten, char** ptTextArr)
    2. {
    3. char dummy[81];
    4. char Feld[15][15];
    5. char Text[80];
    6. char RueckgewandelterWert[80];
    7. char TextEncode[80];
    8. ...
    9. ...
    10. i = 0;
    11. *ptTextArr = (char*) calloc( 81, sizeof(char));
    12. for ( izeilen = 0; izeilen < 15; izeilen++ ) {
    13. for ( ispalten = 0; ispalten < 15; ispalten++ ) {
    14. if ( Feld[izeilen][ispalten] != '~' ) {
    15. TextEncode[i] = Feld[izeilen][ispalten];
    16. i++;
    17. }
    18. }
    19. }
    20. printf("%s<-",TextEncode);
    21. strcat(*ptTextArr,TextEncode);
    22. gets(dummy);
    23. return 0;
    24. }
    Alles anzeigen


    MfG, Jan.