Ergebnis 1 bis 6 von 6
  1. #1
    Anfänger Avatar von cyber_gh0st
    Registriert seit
    25.04.2009
    Beiträge
    208

    Standard "Problem" mit memcmp()

    Hi community

    ich habe grade memcmp() ausprobiert:
    PHP-Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(void)  {
            
    char a[30];
            
    char b[30];
            
    int i 30;
            
    int y;

            
    printf("Gib ein Wort ein:");
            
    fgets(a,30,stdin);
            
    printf("Gib ein anderes Wort ein:");
            
    fgets(b,30,stdin);

            
    printf("DANKE für die eingabe\n");
            
    memcmp(abi);
            if( 
    == )  {     
                    
    printf("Oh mein Gott nicht grade fantasievoll deine Eingabe...\n");
            }

    exit(
    EXIT_SUCCESS);

    dabei ist dann das herumgekommen:
    gh0st@a450-netbook:~$ cd Desktop
    gh0st@a450-netbook:~/Desktop$ gcc test.c
    gh0st@a450-netbook:~/Desktop$ ./a.out
    Gib ein Wort ein:Hallo
    Gib ein anderes Wort ein:Hallo
    DANKE für die eingabe
    gh0st@a450-netbook:~/Desktop$ ./a.out
    Gib ein Wort ein:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAA
    Gib ein anderes Wort einANKE für die eingabe
    gh0st@a450-netbook:~/Desktop$ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    bash: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA: command not found
    gh0st@a450-netbook:~/Desktop$ ./a.out
    Gib ein Wort ein:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAA
    Gib ein anderes Wort einANKE für die eingabe
    Oh mein Gott nicht grade fantasievoll deine Eingabe...
    gh0st@a450-netbook:~/Desktop$
    gh0st@a450-netbook:~/Desktop$


    Warum kommt "oh mein Gott..." nicht wenn ich 2 mal Hallo eingebe???
    und warum muss ich nicht 2 Eingaben machen wenn ich in die erste mehr als 30 Zeichen hereinpacke ich dacht mit fgets()
    werden in meinem Fall nur 30 Zeichen eingelesen???


  2. #2
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    fflush(stdin) vor dem zweiten fgets.

    btw: memcpy gibt den ersten Parameter (Dateintyp: void *) zurück und keinen Integer!

    EDIT: verlesen - unteren Teil nicht beachten (:
    Geändert von blackberry (08.09.2009 um 17:25 Uhr)

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  3. #3
    Anfänger Avatar von cyber_gh0st
    Registriert seit
    25.04.2009
    Beiträge
    208

    Standard

    ich mochte aber nicht Kopieren sondern vergleichen...


  4. #4

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Vergleiche doch nur die Anzahl der Bytes, die auch nötig sind; in den anderen kann sonst was drin' stehen.
    Code:
    i = strlen(a) >= strlen(b) ? strlen(a) : strlen(b);
    y = memcmp(a, b, i);

  5. #5
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    @cyber_ghost
    Hab mich verguckt, sorry.

    Das mit fflush() gillt trotzdem, um sicherzustellen, dass du zweimal einliest und nicht das, was beim ersten mal zuviel war.

    Ansonsten gillt das, was inout gesagt hat.
    Besser wäre jedoch strcmp zu benutzen, da dieses automatisch nach der 0-Terminierung ausschau hält und man sich damit die ganzen strlen-Aufrufe sparen kann.

    Eine weitere Möglichkeit wäre "a" und "b" vorher mit memset auf 0 zu setzen, dann stellt man sicher, dass "in den anderen [...] sonst was drin' steh[t]" (um es mit den Worten von inout zu sagen )


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  6. #6
    Anfänger Avatar von cyber_gh0st
    Registriert seit
    25.04.2009
    Beiträge
    208

    Standard

    das mit strcmp() weis ich ich wollte aber mal memcmp() ausprobieren.
    vielen Dank für eure hilfe


    EDIT:
    So siehts jetz aus:
    PHP-Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    int main(void)  {
            
    char bla1[30];
            
    char bla2[30];
            
            
    memset(bla1'\0'30);
            
    memset(bla2'\0'30);

            
    fgets(bla1,30,stdin);
            
    fflush(stdin);
            
    fgets(bla2,30,stdin);
            
    fflush(stdin);

            if (
    memcmp(bla1,bla2,30) == 0)  {
                    
    printf("=\n");
            }
                    exit(
    EXIT_SUCCESS);

    Geändert von cyber_gh0st (08.09.2009 um 17:30 Uhr)


Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •