Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » zeichenketten in c??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
03.11.2007, 11:46 Uhr
~wolf360
Gast


Hallo erstmal,

gleich mal im voraus, ich bin noch anfänger^^...

Ich bin mit dem open-book von galileocomputing.de grad am c lernen dazu ne Frage:

Wie kann ich Zeichenketten einlesen und dann ausgeben lasse?


C++:
#include <stdio.h>
int main(void) {
  char test;
  printf("Eingabe: ");
  scanf("%c",&test);
  printf("%c",test);
  return 0;
}



wenn ich des so mach, kann ich eingeben so viel ich will, aber er gibt nur die erste Zahl/Buchstaben aus? Wie muss ich des machn das er auch alle Zeichen ausgibt die eingegeben werden?

gruß wolf360

Dieser Post wurde am 03.11.2007 um 12:14 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.11.2007, 12:15 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


char ist nur ein zeichen... In c gibt es keine Strings. (In c++ gibt es eine stringklasse)...

Du musst ein chararray verwenden


C++:
char test[4711] ;  //Platz für 4710 Zeichen plus ein Terminierungsnullbyte


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.11.2007 um 14:30 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.11.2007, 13:13 Uhr
~wolf360
Gast


achso... hab ich nicht gewusst!!

wo sind dann eigentlich die grundlegenden unterschieden c/c++??

Lohnt es sich c vor c++ zu lernen, oder sollte ich als anfänger gleich mit c++ anfangen?

danke für die hilfe!!

gruß wolf360
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.11.2007, 13:23 Uhr
wolf360



mhhh... wenn ich des etz so mach:


C++:
#include <stdio.h>
int main(void) {
  char [4711] test;
  printf("Eingabe: ");
  scanf("%c",&test);
  printf("%c",test);
  return 0;
}


kommen Fehlermeldungen:

4 syntax error before '[' token
6`test' undeclared (first use in this function)
(Each undeclared identifier is reported only once
for each function it appears in.)

Okey hab etz mal a bisl rumprobiert: so stimmt der code:


C++:
#include <stdio.h>
int main(void) {
  char test[2] ;
  printf("Eingabe: ");
  scanf("%s",test);
  printf("Sie haben %s eingegeben",test);
  return 0;
}



okey dazu ein paar fragen:

muss ich bei scanf einen adressoperator bei test benutzen, weil es funktioniert mit und ohne ihn?

Bei mehr als 3 eingaben müsste das Programm doch einen Fehler haben, aber das Programm spinnt erst bei einer eingabe von 7 zeichen, aber warum??

Dieser Post wurde am 03.11.2007 um 13:40 Uhr von wolf360 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.11.2007, 14:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


c-like


C++:
#include <stdio.h>

int main(){

  char test[4711] ;
  printf("Eingabe: ");
  scanf("%s",test);
  printf("%s\n",test);
}



c++-like

C++:
#include <iostream>
#include <string>

int main(){

    std::string test;
    std::cout<<"Eingabe: ";
    std::cin>>test;
    std::cout<<test<<std::endl;
}



Zum Thema Adressoperator. Wenn du eine Variable einer Funktion übergibst dann wird für den durchlauf der Funktion eine Kopie von der Variable angelegt und mit dieser weiter gearbeitet. Die Kopie wird am Ende gelöscht.

Im Falle deines zeichens musst du also die adresse des speichers mitgeben, denn wenn scanf nur die variable selbst bekommen würde, wäre diese ja nach durchlauf der funktion wieder verloren sein, da die kopie ja gelöscht wird...

Bei einem chararray hingegen ist der name des arrays schon die adresse. Der Name zeigt auf den speicherbereich, daher übergibst du hier nicht die adresse der adresse.
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.11.2007 um 14:30 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.11.2007, 14:30 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

@Fehler bei 7 zeichen: Je nach Compiler wird auf dem Stack mehr oder weniger Speicher reserviert. Du ueberschreibst schon bei mehr als 2 Zeichen Speicher, den Du nicht ueberschreiben solltest (abschliessendes 0-Byte am Ende des Strings nicht vergessen). Erst bei 7 Zeichen ueberschreibst Du die Ruecksprungadresse der main-Funktion und springst ins Nirvana.

Generell ist scanf mit %s genau wie gets extrem gefaehrlich. Nimm lieber fgets und gib die maximale Anzahl zu lesender Zeichen mit an, dann vermeidest Du die beliebten Buffer Overruns mit ihren ganzen Folgen...

@C++ vs. C: C ist klein und sauber, C++ ein ziemlich ekliges zusammengewuerfeltes Konstrukt. Trotzdem ist C++ heute in der Industrie wichtiger: Pragmatik vor Eleganz
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.11.2007, 14:30 Uhr
Bruder Leif
dances with systems
(Operator)


Argh @ Zeit
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.11.2007, 14:34 Uhr
wolf360



okey dann bedanke ich mich für eure hilfe!!!

gruß wolf360
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.11.2007, 19:18 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von Bruder Leif:

(...) C ist klein und sauber, (...)



C und sauber, das lässt mich wirklich herzlich lachen...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.11.2007, 20:24 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

C und sauber, das lässt mich wirklich herzlich lachen...

Hatte eigentlich mit diesem Hinweis 5 Minuten nach dem Post von Bruder Leif gerechnet. Hast dir ordentlich Zeit gelassen...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.11.2007 um 20:25 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: