strcmp Frage!!



  • Hallo,

    Bin ziemlicher Anfänger in C.
    Ich habe eine Frage zur Funktionsweise von strcmp!
    Ich lese von einer Datei ein und speichere den ersten string in "type".
    Dann möchte ich nur type mit P5 vergleichen!
    Wenn ich das Programm teste, gibt er mir nix aus!

    WIESO??? Von den beiden if Schleifen wird nichts ausgegeben.

    mfg max

    char *getPGMFile(FILE* input)
    {
      char *type = NULL;
      char *P5 = "P5";
    
      if (strcmp( type, "P5") != 0)
    
      {
        printf ("Fehler beim vergleichen"); 
      }
    
      if (strcmp( type, "P5") == 0)
      {
        printf ("funktioniert ja"); 
      }
    
      return 0;
    }
    
    int main(int argc, char *argv[])
    {
        FILE *input = stdin;
        getPGMFile(input);
        printf("fertig");
    
      return 0;
    
    }
    


  • Weil dein Programm crahst. Du sollst strcmp() keine Nullzeiger übergeben.



  • ach, sorry.

    hab da einen codeteil unabsichtlich gelöscht.

    das steht noch vor strcmp:

    fscanf(input,"%s",&type);
      printf("PGM_ID: %s\n",&type);
    

    mfg max



  • Es ist

    fscanf(input,"%s",type); 
     printf("PGM_ID: %s\n",type);
    

    außerdem sehe ich gerade, dass du für type keinen Speicher angelegt hast -> char type[100];



  • ...und dann brauchst auch nicht 'strcmp' doppelt aufzurufem:

    if (strcmp( type, "P5"))
       printf ("Fehler beim vergleichen");  // != 0
    else
       printf ("funktioniert ja");          // == 0
    


  • also der Code sieht jetz so aus, aber da tut sich noch immer nichts.

    mfg max

    // picture.c
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //------------------------------------------------------------------------
    // read header & verify that it is a PGM File. 
    char *getPGMFile(FILE* input)
    {
      char type[100];
      char *P2 = "P2";
      char *P5 = "P5";
    
      fscanf(input,"%s",type);
      printf("PGM_ID: %s\n",type); 
    
      if (strcmp( type, "P5") != 0)
    
        printf ("Fehler beim vergleichen"); 
    
      else
    
        printf ("funktioniert ja"); 
    
      return 0;
    }
    
    //------------------------------------------------------------------------
    // MAIN PROGRAM
    int main(int argc, char *argv[])
    {
    
        FILE *input = stdin;
        getPGMFile(input);
        printf("fertig");
    
      return 0;
    
    }
    


  • setz mal ein

    system("pause")
    

    vor das return 0; in main() (ich weiss ja, da gibts schönere möglichkeiten ... )



  • Also bei mir tut sich da gar nix mit diesem "pause" Befehl.

    mfg max



  • Also irgendwie hab ich da einen totalen Mist gebaut jetzt.
    Also wenn ich in der commandline noch die Adresse einer Datei eingeben will, und enter drücke, ist ihm das egal. Aber ich kann darauf etwas eingeben, und das wird dann als string eingelesen und gleich wieder ausgegeben.
    Ich versteh da schon langsam gar nix mehr. Hat nämlich schon einmal funktioniert.

    mfg max



  • code ? ich sehe nicht dass du die commandolines abfängst



  • so jetz gehts wieder. aber wenn ich zb mehr als zwei Parameter eingebe, dann ist doch argc > 2, oder? aber er gibt das printf dann nicht aus!
    Sorry das ich ein bissl vom Thema abschweife.

    mfg max

    int main(int argc, char *argv[])
    {
    
      char* data = NULL;
      int error_code = 0;
    
      if (argc > 2)
        printf("zu viele Parameter");
      else
      {
    
        FILE *input = stdin;
        if (argc == 2)
        {
          if ((input = fopen(argv[1],"rb")) == NULL)
          {
            printf(" Datei ist leer");
          }
        }
    
        if(input)
        {
          if((data = getPGMFile(input)))      
    
            printf("eingelesen");
            else
              error_code = 3; 
          }
    
          free(data);
          fclose(input);
        }
    
      return 0;
    
    }
    


  • Schau dir halt mal den Wert von argc an!


Anmelden zum Antworten