Announcement

Collapse
No announcement yet.

beispiel 1 task A

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • beispiel 1 task A

    wenn ich einen klartext hab und rufe den argument -h,werden die einzelnenen buchstaben anhand meines definierten arrays(array der 28 wörter) in wörter je nach buchstabe in meinem klartext umgewandelt

    habe ich das richtig verstanden?

    danke

  • #2
    Solange die dir zugeteilte Aufgabe stegit ist: ja.
    ~~ Ondra „Ravu al Hemio“ Hošek
    I know what PC LOAD LETTER means

    Tutor außer Dienst · OOP · OS · PK · PP

    Comment


    • #3
      sorry hab vergessen es zu erwähnen

      Comment


      • #4
        Ich habe folgendes problem

        static const char *strings[]={"one","two","three"}
        static char *text[5];

        ich will einfach die strings elemente von strings[] in den array der pointer text[5] kopieren(pointer kopieren)
        ich hab text[0]=strings[0] probiert aber funktioniert nicht. ich bekomme warning: assignment makes pointer from integer without a cast vom compiler

        ich hab auch *text[0]=*strings[0] probiert dann aber ich bekomme segmetation fault

        wie kann ich das lösen
        danke
        Last edited by MSIO7; 01-04-2012, 00:01.

        Comment


        • #5
          static char *strings[]={"one","two","three"};
          static char *text[5];

          text[0] = strings[0];
          printf("%s --- \n", text[0]); ---> Ausgabe: one


          gibt es einen Grund warum du "strings" const gemacht hast??

          Comment


          • #6
            Originally posted by luna09 View Post
            gibt es einen Grund warum du "strings" const gemacht hast??
            Er hat durchaus einen guten Grund: jedes String-Literal ("hallo, ich bin ein String-Literal") ist vom Typ const char * und es ist eine sehr gute Idee, das formell zu erwähnen, denn in dem Moment, wo du in eine String-Konstante hineinschreibst, ist ein Segfault mehr als wahrscheinlich (wie ich kürzlich in einer meiner Betreuungseinheiten feststellen musste).

            Originally posted by MSIO7 View Post
            ich will einfach die strings elemente von strings[] in den array der pointer text[5] kopieren(pointer kopieren)
            wie kann ich das lösen
            Rein prinzipiell indem du den String castest. Die Frage ist: warum? Du versuchst hier den Schutz des const-Schlüsselworts zu umgehen, und mir fällt keine Funktion ein, die du in stegit bräuchtest, die nicht mit einem const char * umgehen kann.

            Umgekehrt kannst du aber jederzeit einem const char * einen char * zuweisen.
            ~~ Ondra „Ravu al Hemio“ Hošek
            I know what PC LOAD LETTER means

            Tutor außer Dienst · OOP · OS · PK · PP

            Comment


            • #7
              Originally posted by Ravu al Hemio View Post
              Er hat durchaus einen guten Grund: jedes String-Literal ("hallo, ich bin ein String-Literal") ist vom Typ const char * und es ist eine sehr gute Idee, das formell zu erwähnen, denn in dem Moment, wo du in eine String-Konstante hineinschreibst, ist ein Segfault mehr als wahrscheinlich (wie ich kürzlich in einer meiner Betreuungseinheiten feststellen musste).


              Rein prinzipiell indem du den String castest. Die Frage ist: warum? Du versuchst hier den Schutz des const-Schlüsselworts zu umgehen, und mir fällt keine Funktion ein, die du in stegit bräuchtest, die nicht mit einem const char * umgehen kann.

              Umgekehrt kannst du aber jederzeit einem const char * einen char * zuweisen.
              ich brauche das deshalb weil ich mit static const *string[]={"one","two",...} 28 wörter(zeichenketten- array) initialisieren will.dann habe ich static char *cipher_text[300] definiert. jedes zeichen im eingelesenen text wird nach dem array index in das literal vom *string[] umgewandelt. string literale will ich in den cipher_text array speichern d.h im cipher_text wird die geheimbotschaft.. dann kann ich sie entweder in ein file abspeichern oder auf den bildschirm ausgeben .. ist das einen guten ansatz ?

              Comment


              • #8
                Es ist sicher ein möglicher Ansatz. Hilft es, wenn du static char *cipher_text[300] in static const char *cipher_text[300] änderst?

                Du musst die Ergebnisse aber nicht unbedingt zwischenspeichern, sondern kannst die Wörter ja sofort ausgeben. fprintf kann helfen: wenn es auf dem Bildschirm landen soll, übergibst du als ersten Parameter stdout; wenn es in eine Datei geschrieben werden soll, dann übergibst du den entsprechenden FILE-Pointer als ersten Parameter.
                ~~ Ondra „Ravu al Hemio“ Hošek
                I know what PC LOAD LETTER means

                Tutor außer Dienst · OOP · OS · PK · PP

                Comment


                • #9
                  Originally posted by Ravu al Hemio View Post
                  Er hat durchaus einen guten Grund: jedes String-Literal ("hallo, ich bin ein String-Literal") ist vom Typ const char * und es ist eine sehr gute Idee, das formell zu erwähnen, denn in dem Moment, wo du in eine String-Konstante hineinschreibst, ist ein Segfault mehr als wahrscheinlich (wie ich kürzlich in einer meiner Betreuungseinheiten feststellen musste).
                  jein. also segfaulten wird es weil er das literal in einen read-only bereich legt (so erzaehl ich das immer in der VO). aber was den typ angeht:
                  Originally posted by C99-6.4.5.5
                  ... The multibyte character sequence is then used to initialize an array of static storage duration and length just sufficient to contain the sequence. For character string literals, the array elements have type char...
                  also formal ist der typ nicht "const char *", auch wenn das verhalten aehnlich wirkt. warum darf er is in einen read-only bereich legen und warum wird es deshalb segfaulten:
                  Originally posted by C99-6.4.5.6
                  ... If the program attempts to modify such an array, the behavior is undefined.
                  wie immer, falls ich bei meiner interpretation falsch liege, bitte um aufklaerung.
                  Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

                  Comment


                  • #10
                    Mea culpa, du hast Recht. Ich habe es mit C++ verwechselt, wo die Const-Correctness-Offensive dazu führte, dass auch String-Literale einem Array von const chars entsprechen:

                    Originally posted by N3242-2.14.5 (8)
                    Ordinary string literals and UTF-8 string literals are also referred to as narrow string literals. A narrow string literal has type "array of n const char", where n is the size of the string as defined below, and has static storage duration (3.7).
                    Angeblich weigert sich das Standard-Komitee, String-Literale auch in C const zu machen, auch nur aus Gründen der "bugward compatibility".
                    ~~ Ondra „Ravu al Hemio“ Hošek
                    I know what PC LOAD LETTER means

                    Tutor außer Dienst · OOP · OS · PK · PP

                    Comment


                    • #11
                      Originally posted by Ravu al Hemio View Post
                      Angeblich weigert sich das Standard-Komitee, String-Literale auch in C const zu machen, auch nur aus Gründen der "bugward compatibility".
                      sonst mueszte man ja lauter "discards 'const' qualifier"-warnings bekommen. wer will denn sowas? ;-)
                      Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

                      Comment


                      • #12
                        habe eine Verständnisfrage zur Angabe Mycompress.
                        Definieren Sie für die maximale Anzahl an Zeichen in einer Zeile eine Konstante, wobei Sie annehmen
                        dürfen, dass keine Zeile mehr Zeichen enthält.
                        ist das für eine stdin Eingabe gedacht oder auch wenn man aus einem File lesen soll?
                        muss man das genau so machen?
                        weil wenn man von einem File liest, ist doch egal wieviele Zeilen bzw. welche Zeilenanzahl man liest?!
                        Last edited by Racket; 08-04-2012, 19:42.

                        Comment


                        • #13
                          du kannst das bei mycompress natürlich mit fgetc machen, also pro character von file lesen.
                          wenn du es aber anders machst und pro Zeile liest, dann brauchst du die Begrenzung schon.
                          nämlich bei fgets(buffer, zeilenlaenge, filepointer)

                          mit fgets liest du die definierte Anzahl an Zeichen pro Zeile --> zeilenlaenge in deinen Buffer.
                          den deklarierst du vorher zB mit char buffer[zeilenlaenge];

                          am besten definierst du zeilenlaenge via:
                          #define zeilenlaenge (40)
                          oder eben eine andere zahl - das ist dann dir überlassen

                          Comment


                          • #14
                            kann ich auch direkt mit buffer[1][0], lesen die einzelnen char lesen?

                            Comment


                            • #15
                              Kannst du sicher, hast dann aber trotzdem nur maximal so viele Zeichen eingelesen, wie viel du an fgets übergeben hast (minus 1 für das NUL-Byte).
                              ~~ Ondra „Ravu al Hemio“ Hošek
                              I know what PC LOAD LETTER means

                              Tutor außer Dienst · OOP · OS · PK · PP

                              Comment

                              Working...
                              X