Prüfen ob Nummer, falsches Casting?



  • Hallo,
    wieso funktioniert das casting von code[i] in Zeile 12 nicht?

    gutschein.c:12: warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast
    /usr/include/string.h:135: note: expected ‘const char * restrict’ but argument is of type ‘char’

    #include <stdio.h>
    #include <string.h>
    
    int main (int argc, char* argv[]) 
    {
    	char *code = "12ab34!";
    	char zcode[10];
    	for (int i = 0; i < strlen(code); i++)
    	{
    		if (code[i] >= 48 && code[i] <= 57)
    		printf(" %i ",code[i]);
    		strcat(zcode,(char)code[i]);
    
    	}
    
    	return 0;
    }
    


  • Was denkst du passiert hier?

    char *code = "12ab34!"; //ganz dicker Fehler
    

    Außerdem wird strcat falsch verwendet...

    (char)code[i] /*--->*/ code[i] //man das ist schon ein char.
    


  • strcat will einen char*, Du übergibst einen char.



  • strcat() erwartet als 2. Parameter die Adresse eines Nullterminierten Strings. (ein char Array)
    Du übergibst aber ein einzelnes Zeichen.
    Selbst wenn du da jetzt (char 😉 vorschreibst klappt das nicht.



  • int position = 0;
    ..
    for(...)
    {
      zcode[position++] = code[i];
    }
    

    Und Stringliterale solltest du wirklich gleich const deklarieren, Dummheiten wie

    const char* c = "Hallo";
    c[1] = 'e';
    

    unterbindet dann der Compiler.



  • // _Falke Kommentar noch nicht gelesen zu dem Zeitpunkt

    #include <stdio.h>
    #include <string.h>
    
    int main (int argc, char* argv[]) 
    {
    	char code[] = "12ab34!";
    	char zcode[10];
    	for (int i = 0; i < strlen(code); i++)
    	{
    		if (code[i] >= 48 && code[i] <= 57)
    		printf(" %i ",code[i]);
    		strcat(zcode,code[i]);
    
    	}
    
    	return 0;
    }
    

    Ich weiß nicht weiter,
    wie schaff ich es, dass ich mein einzelnes Zeichen passend umcaste?



  • Und das zcode[position] = '\0'; nach der Schleife nicht vergessen.



  • DirkB schrieb:

    Und das zcode[position] = '\0'; nach der Schleife nicht vergessen.

    Blöd von mir, habe ich vergessen, danke für die Ergänzung! 🙂


Anmelden zum Antworten