Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C (C89, C99 und C11) ::  Probleme mit char array     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
c-neuling
Unregistrierter




Beitrag c-neuling Unregistrierter 01:22:18 25.02.2012   Titel:   Probleme mit char array            Zitieren

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
Thuruk
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.01.2012
Beiträge: 132
Beitrag Thuruk Mitglied 01:32:46 25.02.2012   Titel:              Zitieren

Mit

C++:
char Eingabe[10];


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

C++:
char Eingabe=10;


ein Byte mit dem Dezimalwert 10.

Koper doch mal deinen ganzen Quelltext.
c-neuling
Unregistrierter




Beitrag c-neuling Unregistrierter 12:23:30 25.02.2012   Titel:              Zitieren

#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.....
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17909
Beitrag SeppJ Moderator 13:36:55 25.02.2012   Titel:              Zitieren

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.
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 14:13:08 25.02.2012   Titel:              Zitieren

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.
gary1195
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.04.2008
Beiträge: 181
Beitrag gary1195 Mitglied 16:01:56 26.02.2012   Titel:              Zitieren

C++:
1
2
3
4
5
6
7
8
9
10
#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
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2689
Beitrag Wutz Mitglied 18:58:18 26.02.2012   Titel:              Zitieren

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

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
gary1195
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.04.2008
Beiträge: 181
Beitrag gary1195 Mitglied 11:27:18 27.02.2012   Titel:              Zitieren

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
#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?
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 23067
Beitrag rüdiger Moderator 12:36:01 27.02.2012   Titel:              Zitieren

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

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
}
c++.de :: C (C89, C99 und C11) ::  Probleme mit char array   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.