Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Funktion Zeiger auf eine Zeichenkette » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Funktion Zeiger auf eine Zeichenkette
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Funktion Zeiger auf eine Zeichenkette Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Aufgabenstellung:
Schreiben Sie eine C-Funktion, die einen Zeiger auf eine Zeichenkette(Zeiger auf Typ char) als Parameter hat und das erste Zeichen dieser Zeichenkette als Funktionswert(Typ char) zurückgibt.


#include <stdio.h>


char xy( char *Zeiger[]);
int main (void) {

char Zeichenkette[100];

scanf("%s", Zeichenkette);

xy(*Zeiger);

printf(" Erster Buchstabe der Zeichenkette ist %c",xy(Zeiger));

return 0;
}

char xy( char *Zeiger[]){

char text[100];
char e;
*Zeiger[]=text[100];
e= text[0];
return e;
}

Und wenn einer meint, das ist totaler Sch***, was ich geschrieben habe, hat sicher recht, weil ich mit den Zeiger nicht zu recht komme(
Kann mir einer helfen und erklären, wie das mit Zieger genau funktioniert.
Ich habe zwei verschiedene Tutorien dazu gelesen. Es hat mir nur wenig gebracht.
19.02.2013 20:20 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

Dein Ansatz ist gar nicht so weit von der Lösung entfernt.

Fangen wir doch mal langsam an und schauen ob das dein Verständnis verbessert.

Du deklarierst Zeichenkette als char array. Welchen Typ hat dann Zeichenkette?

Tipp: Du musst dazu wissen, was in C ein Array ist.

VG,

Karlito
19.02.2013 21:00 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich dachte " Zeiger []" ist meine Array
19.02.2013 21:07 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein, eben nicht. Ein Array ist ein Speicherbereich und die Variable ist dann ein Zeiter auf das erste Element.

Wenn also Zeichenkette den Typ char * hat, was ist dann *Zeichenkette?

Edit: Achso, sorry, ich habe nicht richtig gelesen. Es ist ein Array... Das ist richtig. Trotzdem mal bitte die oben genannte Frage beantworten, wenn ich dich jetzt nicht vollends verwirrt habe.
Edit2: Verstehst du den Zusammenhang zwischen Array und Zeiger?

VG,

Karlito
19.02.2013 21:15 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zeiger zeigt auf eine Adresse und Array reserviert Speicherplatz
19.02.2013 21:41 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Mh, das ist ein wenig schwierig.

An deinem Beispiel:
code:
1:
2:
3:
char Zeichenkette[100];


Zeichenkette ist nun eine Variable. Diese hat den Typ (char *). Mit der Deklaration wird aber, wie du schon sagst Speicherplatz reserviert. Die Variable ist nun ein Zeiger auf diesen reservierten Speicherplatz.

Die Ausdrücke
code:
1:
2:
3:
*Zeichenkette;

und
code:
1:
2:
3:
Zeichenkette[0];

haben die selbe Bedeutung.

Soweit klar?

VG,

Karlito
19.02.2013 21:52 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn es gleich ist, wie kann man ein Zeiger auf eine Zeichenkette machen?
19.02.2013 21:59 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Eine Zeichenkette ist in C eigentlich schon ein Zeiger... Das ist ja das geheimnis...

Du musst also an die Fkt xy nur Zeichenkette selbst übergeben...

Deine Funktion xy stimmt dann aber noch nicht. Wenn man weiß wie, dann ist es sehr einfach. Schon eine Idee?

VG.

Karlito
19.02.2013 22:18 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein, ich habe alle Zeichenkette[] durch *Zeichenkette ersetzt, kein Schritt weiter gekommen. Ich rate mehr, als das ich weiß, was ich da machen soll(
19.02.2013 22:34 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das war der falsche Schluss... Deine main war fast richtig. Du musst nur an die Funktion xy Zeichenkette übergeben und nicht *Zeichenkette. Du brauchst auch xy nicht 2 mal aufrufen. Ich gebe dir mal die main vor:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
#include <stdio.h>

char xy( char *Zeiger[]);
  int main (void) {
  char Zeichenkette[100];

  scanf("%s", Zeichenkette);
  printf(" Erster Buchstabe der Zeichenkette ist %c",xy(Zeiger));

  return 0;
}


Du musst jetzt nur noch die Funktion xy implementieren.

VG,

Karlito
19.02.2013 22:47 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Tja, ich habe jetzt das geschrieben. Ist auch falsch.
char xy( char *Zeiger[100]){
char *e;
*e=*Zeiger[0];
return *e;

Wenn ich Zeiger [0] schreibe, damit nur der erster Zeichen von der Zeichenkette kommt, woher weist das Programm, dass ich nicht eine Zeichenkette mit 0Zeichen meine?
Und wenn *Zeiger und Zeiger[] gleich ist, ist *Zeiger[] nicht doppelt deklariert?
20.02.2013 12:55 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Lycaner
Tja, ich habe jetzt das geschrieben. Ist auch falsch.
char xy( char *Zeiger[100]){
char *e;
*e=*Zeiger[0];
return *e;


Das ist ziemliches Kauderwelsch, aber auch meine Schuld. S.u.

Zitat:
Original von Lycaner
Und wenn *Zeiger und Zeiger[] gleich ist, ist *Zeiger[] nicht doppelt deklariert?


Du hast vollkommen recht. Da war ich etwas schlampig... Es müsste heißen:

code:
1:
2:
3:
char xy( char *Zeiger);


Vielleicht ginge auch
code:
1:
2:
3:
char xy( char Zeiger[]);


Das weiß ich nicht genau. Jedenfalls musst du im Anschluss nur das erste Element des "Arrays" zurückgeben. Eine neue Variable brauchst du dafür nicht. Den Funktionskopf musst Du dementsprechend auch anpassen.

Zitat:
Original von Lycaner
Wenn ich Zeiger [0] schreibe, damit nur der erster Zeichen von der Zeichenkette kommt, woher weist das Programm, dass ich nicht eine Zeichenkette mit 0Zeichen meine?


Das weiß das Programm nicht. Das musst Du durch geeignete Prüfungen sicherstellen, bevor du die Funktion aufrufst.

Anmerkung: Leere Zeichenkette nicht mit uninitialisiert verwechseln. Sollte die Zeichenkette nur die Länge 0 haben, so wäre der Rückgabewert der Funktion schlichtweg 0, da Zeichenketten in C ja immer durch 0 bzw '\0' terminiert werden. Ist die Zeichenkette uninitialisiert erhältst du einen Zufälligen Wert... Das gilt es auf jeden Fall zu vermeiden. So wie die main momentan implementiert ist, kann die Zeichenkette ja aber nicht uninitialisiert sein.

VG,

Karlito
20.02.2013 13:49 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

char xy( char *Zeiger){
char e;
e=*Zeiger;
}

Wenn ich das, als Funktion eingebe, gibt er nur den Fehler im Hauptprogramm, dass er diese Funktion nicht kennt(
20.02.2013 14:31 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo.

ich weiß nicht genau wo dein Fehler ist... Die Variable Zeiger war in der Funktion main nicht bekannt. Noch ein Fehler der sich leider eingeschlichen hat... Das passiert wenn man nicht testet.

Um weitere Missverständnisse zu verhindern, hier die lauffähige Variante.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <stdio.h>

char xy( char *Zeiger);

int main (void) {
  char Zeichenkette[100];

  scanf("%s", Zeichenkette);
  printf(" Erster Buchstabe der Zeichenkette ist %c\n",xy(Zeichenkette));

  return 0;
}

char xy( char *Zeiger){
	return Zeiger[0];
	//return *Zeiger; //liefert das selbe
}


Sorry für die Umstände. Wenn etwas unklar ist, kannst du natürlich gern nachfragen.

VG,

Karlito
20.02.2013 14:38 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Tja, jetzt bin ich etwas verwirrt, eigentlich macht die Funktion nichts und die gibt nur ein Zeichen aus, weil man in printf %c und nicht %s benutz. Mit der Funktion kann man nur den erste Buchstaben ausgeben und nur einen Buchstaben. Ich dachte muss eine Funktion schreiben, die auch in der Lage ist beliebiges Zeichen aus der Zeichenkette auszugeben.
Kurze Frage am Rande !k ist immer null oder?
20.02.2013 15:08 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Funktion Zeiger auf eine Zeichenkette