iaalpha, isdigit, etc. exception aber warum



  • wert = argv[optind-1];
      if ( (isalpha(wert)))
          printf("%s ist keine gueltige Artikelnummmer", wert);
      else
          entry.num = atoi(argv[optind-1]);
    

    Sobal ich beim Programmafruf auf isalpha teste gibts einen bösen programmabsturz. Warum??? Ich hab keine Ahnung und hoffe, dass ihr mir weiterhelfen könnt.

    Danke und N8



  • isalpha checkt einen char und nicht einen string (char-array) ob es ein buchstabe ist... an sonsten zeig mal die typen deiner variablen und du musst sicher stellen das optind-1 >0 und kleiner argc ist...

    zum anderen ist es vermutlich schlauer isdigit zu verwenden... nur weil irgendwas kein buchstabe ist heisst das noch lange nicht das es eine zahl/ziffer ist...



  • int
    is_valid(const char *text, int (*func)(int c))
    {
    	for(; *text; text++)
    		if(!func(*text))
    			return 0;
    
    	return 1;
    }
    

    if(is_valid(wert, isalpha)) ...



  • isalpha() verlangt ein einzelnes zeichen als argument und keinen string.

    der absturz könnte daher rühren, daß manche stdlibs (insbesondere gnu) den test aus geschwindigkeitsgründen mit einem array machen. etwa (char_type[c]&_ISALPHA). wenn du anstelle eines chars eine addresse übergibst, dann gibt das natürlich eine gewaltige bereichsüberschreitung. womöglich bis in geschützten systemspeicher hinein.



  • Heloo leute
    wie funktioniert isDigit methode



  • zu so einem prototypen kann man wohl nicht mehr viel sagen:

    int isdigit(int c);
    

    und rate mal welcher int-wert zurück geliefert wird, wenn es ein digit ist...


Anmelden zum Antworten