Probleme mit char array



  • Hallo,
    ich möchte einen char Array deklarieren
    z.B. char Eingabe[10]

    ich krieg aber einen "fehler" wegen

    wenn ich aber die Variable als z.B.
    char Eingabe=10 deklariere, dann erhalte ich keinen Fehler

    wieso ? 🙂

    besten gruß

    a c-neuling



  • Mit

    char Eingabe[10];
    

    erzeugst du ein 10 Bytes langes Array (1 Byte=1 Char), mit

    char Eingabe=10;
    

    ein Byte mit dem Dezimalwert 10.

    Koper doch mal deinen ganzen Quelltext.



  • #include <stdio.h>
    main ()
    {
    char name=30;
    printf("Geben Sie bitte Ihren Namen ein \n");
    scanf("%s",&name);
    printf("Hallo %s!\n",&name);
    }

    OK! ich verstehe, die Array hat gar nicht die Länge 30 sondern den wert 30.
    aber wenn ich

    char name[30] "eingebe" erhalte ich eine merkwürdige Pointer fehlermeldung

    In Java war das kein problem.....


  • Mod

    c-neuling schrieb:

    In Java war das kein problem.....

    Das da oben wäre auch in Java falsch. Du hast keinen einzigen der Fehler abgestellt, die dir genannt wurden. name ist immer noch kein Array, sondern ein einzelnes Zeichen mit dem Zahlenwert 30. Das scanf ist auch total verdreht, %s ist für Zeichenketten, da du aber ein einzelnes Zeichen hast, geht das schief. Außerdem bräuchtest du bei Zeichenketten keinen Adressoperator, wobei das hier natürlich wieder richtig ist, da du nur ein Zeichen hast. Was du aber gar nicht möchtest. Das anschließende printf ist auch total verkehrt, wieder ist %s für Zeichenketten, du hast aber keine. Und ein Adressoperator hat bei printf sowieso nichts zu suchen, sofern man keine Adressen ausgeben möchte.



  • C ist kein Java.

    Wenn du wie in Java programmieren möchtest, nimm Java.

    Wenn du C programmieren willst, lies zumindest die ersten Kapitel von deinen Unterlagen durch.

    Du kannst auch mal das Beispiel bei http://www.cplusplus.com/reference/clibrary/cstdio/scanf/ anschauen und damit rumspielen.



  • #include <stdlib.h>
    #include <stdio.h>
    int main(void)
    {
    	char name[30];
    	printf("Geben Sie bitte Ihren Namen ein \n");
    	scanf("%29s", name);
    	printf("Hallo %s!\n",name);
    	return EXIT_SUCCESS;
    }
    

    Hinweis ein String ist kein Objekt und auch kein "eingebauter" Datentyp



  • Es Stringliteral aber ist ein Objekt, auch liefert dein Beispielprogramm für z.B. Doppelnamen mit Leerzeichen ein kaum gewünschtes Resultat.



  • #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
    	char name[30];
    	printf("Geben Sie bitte Ihren Namen ein \n");
    	fgets(name, sizeof(name), stdin);
    	if( name[ strlen(name) -1 ] == '\n' ) 
    		name [ strlen(name) -1 ] = '\0';
    	printf("Hallo %s!\n", name);
    	return EXIT_SUCCESS;
    }
    

    So besser?



  • Du solltest den Rückgabewert von fgets prüfen.

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
        char name[30];
        printf("Geben Sie bitte Ihren Namen ein\n");
        if(fgets(name, sizeof(name), stdin)) {
          size_t const len = strlen(name);
          if( name[len-1 ] == '\n' ) {
            name[len-1] = '\0';
          }
          printf("Hallo %s!\n", name);
        }
        return EXIT_SUCCESS;
    }
    

Anmelden zum Antworten