PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : *Zeiger in C


UpMerge
2008-08-20, 15:57:05
Hallo!

#include <stdio.h>
#include <stdlib.h>

int WertT(char );

int main()
{
char Text[80]="Ich liebe C!";

WertT(Text);
printf("%d",Text);
system("pause");



}


int WertT(char txt)
{
char *pt;
char Text1[80];
int n;

for(pt=txt[0];*pt;pt++)
{

return(*pt-txt);
}
}


Fehlermeldung:
In function `int main()':
10:invalid conversion from `char*' to `char'
10: initializing argument 1 of `int WertT(char)'
In function `int WertT(char)':
25: invalid types `char[int]' for array subscript


Vielleicht habt ja ihr eine Idee was ich falsch mache.:smile:

Superguppy
2008-08-20, 16:18:17
Du kannst deinen Pointer *pt nicht gleich dem Wert eines Characters setzen. Du musst schon eine Adresse angeben.

Die Varianten pt=&(txt[0]); oder pt=txt; wären richtig, wobei die erste eher umständlich ist.

UpMerge
2008-08-20, 16:36:24
for(pt=txt[0]...... hab ich doch die Adresse vom 1.ten Zeichen von txt übergeben oder nicht?
txt ist ja vom Typ char also brauch ich den & Operator doch nicht.
EDIT: Also muss ich die Null auch nicht mit angeben da char txt ja für die erste Adresse steht.

Mit for(pt=txt..... funktinierts leider auch nicht.

RuteniuM
2008-08-20, 16:43:55
for(pt=txt[0]...... hab ich doch die Adresse vom 1.ten Zeichen von txt übergeben oder nicht?
txt ist ja vom Typ char also brauch ich den & Operator doch nicht.
txt alleine ist der Pointer auf das erste Zeichen im Array.

Edit: Bekommst du die gleiche Fehlermeldung?

Superguppy
2008-08-20, 16:50:17
Mit for(pt=txt..... funktinierts leider auch nicht.
Das Ganze wird sowieso nicht wirklich funktionieren ... was hast du für eine Abbruchbedingung bei der for-Schleife? Das endet bestenfalls in einer Speicherzugriffsverletzung. Und ich sehe gerade, dass die Funktion als Parameter einen char erwartet, du ihr aber ein char* bzw. char[] mitgeben magst. :frown:

RuteniuM
2008-08-20, 16:58:27
willst du jeden Character des Strings einzeln ausgeben, oder soll das Programm irgendwas anderes bezwecken?

_Gast
2008-08-20, 17:02:13
for(pt=txt[0]...... hab ich doch die Adresse vom 1.ten Zeichen von txt übergeben oder nicht?Nein.

txt[0]ist der Inhalt der Variablen txt an Index 0.
&txt[0] oder alternativ txtist die Adresse des Inhalts der Variablen txt an Index 0.

UpMerge
2008-08-20, 17:11:19
Mit dem Programm sollen ermittelt werden wieviele Zeichen in Text enthalten sind.
@Rutenium: Ja bekomme die gleiche Fehlermeldung.
@Supperguppy: Steht so in der Fehlermeldung. Aber weiß nicht, wie ich das ändern kann.
Edit: Abbruchsbedingung ist *pt--> *pt !=0.

RuteniuM
2008-08-20, 17:17:29
Mit dem Programm sollen ermittelt werden wieviele Zeichen in Text enthalten sind.
@Rutenium: Ja bekomme die gleiche Fehlermeldung.
@Supperguppy: Steht so in der Fehlermeldung. Aber weiß nicht, wie ich das ändern kann.Das geht doch am einfachsten mit der Funktion
strlen (const char *s), brauchst nur #include <string.h> dafür.

also: int sl;
sl = strlen(txt);
printf("%d", sl);

UpMerge
2008-08-20, 17:20:11
Ja!
Will aber mit Zeiger üben!:)

RuteniuM
2008-08-20, 17:37:34
Ja!
Will aber mit Zeiger üben!:)
OK, dann hier:

#include <stdio.h>

int main ()
{
int i;
char txt[50]="Das ist der String.";
char *pt;

for (pt=txt, i=1; *pt!='\0'; pt++, i++)
{
}

printf ("%d Zeichen\n", i);
return 0;
}

UpMerge
2008-08-20, 17:46:10
Ja das funktioniert!!

Aber wollte das mit einer Funtion machen.
Bekomme aber bei der Ausführung des Programms einen Fehler in Zeile 10 und der besagt:

invalid conversion from `char*' to `char'
initializing argument 1 of `int WertT(char)'

Da stimmt doch was mit der Parameterübergabe an die Funktion nicht oder?
EDIT: Die lösung ist(wie Superguppy schon geschrieben hat), dass man in der Funktion den char txt mit diesen [](Zeichen) übergeben muss!:)
Dann funktionierts auch !

Danke an alle!!!

RuteniuM
2008-08-20, 17:58:23
Ja das funktioniert!!

Aber wollte das mit einer Funtion machen.
Bekomme aber bei der Ausführung des Programms einen Fehler in Zeile 10 und der besagt:

invalid conversion from `char*' to `char'
initializing argument 1 of `int WertT(char)'

Da stimmt doch was mit der Parameterübergabe an die Funktion nicht oder?So gehts:
#include <stdio.h>

int lenght(char* str)
{
int i;
char *pt;

for (pt=str, i=1; *pt!='\0'; pt++, i++)
{
}

return i;
}

int main ()
{
char txt[50]="Das ist der String.";

printf ("%d Zeichen\n", lenght(txt));

return 0;
}Edit: War etwas langsam. :)

Gast
2008-08-20, 18:30:04
for (pt=str, i=1; *pt!='\0'; pt++, i++)
{
}


Je nachdem was einem besser gefällt kann man statt den leeren geschweiften Klammern auch ein Semilikon verwenden
zum Beispiel so

for (pt=str, i=1; *pt!='\0'; pt++, i++)
;

UpMerge
2008-08-20, 18:40:50
@RuteniuM: Genau so sollte das bei mir dann auch ausschauen!
Supa!

an.zgep
2008-08-20, 21:01:28
vllt hab ichs auf die schnelle ja überlesen, aber der grund für die Fehlermeldung wurde dir glaub ich noch nicht mitgeteilt:

Hallo!

#include <stdio.h>
#include <stdlib.h>

int WertT(char );

int main()
{
char Text[80]="Ich liebe C!";

WertT(Text);
printf("%d",Text);
system("pause");



}


int WertT(char txt)
{
char *pt;
char Text1[80];
int n;

for(pt=txt[0];*pt;pt++)
{

return(*pt-txt);
}
}


Fehlermeldung:
In function `int main()':
10:invalid conversion from `char*' to `char'
10: initializing argument 1 of `int WertT(char)'
In function `int WertT(char)':
25: invalid types `char[int]' for array subscript

Vielleicht habt ja ihr eine Idee was ich falsch mache.:smile:

die erste kriegst du deshalb:
int WertT() erwartet einen Parameter vom Typ char, du übergibst aber einen char* (bzw. char[], was eigentlich das selbe ist)

die zweite deshalb:
pt ist vom Typ char* und du willst aber ein char zuweisen (char[index] ist vom Typ char).

UpMerge
2008-08-21, 00:56:19
Doch ist oben schon mal erwähnt worden aber ich danke dir trotzdem!;)

Tiamat
2008-08-21, 10:31:28
Hi,
mich würde mal interessieren, worin der Vorteil von Zeigern besteht ?
Also ich kenne ein paar Datenstrukturen, bei denen man mit Zeigern arbeitet. ( Liste und Bäume ). Welcher Vorteil besteht, Zeiger auch auf primitive Datentypen einzusetzen ?

an.zgep
2008-08-21, 19:59:33
Hi,
mich würde mal interessieren, worin der Vorteil von Zeigern besteht ?
Also ich kenne ein paar Datenstrukturen, bei denen man mit Zeigern arbeitet. ( Liste und Bäume ). Welcher Vorteil besteht, Zeiger auch auf primitive Datentypen einzusetzen ?

ist z.b. nützlich wenn eine funktion mehrere werte zurückgeben soll. mittels return kann man ja nur einen wert zurückgeben, wenn mit referenzen oder zeigern gearbeitet wird kann eine funktion mehrere werte (und vor allem werte mit verschiedenen typen) manipulieren.
außerdem ist das verändern einer bereits existierenden variablen mittels zeiger/referenz effizienter als das erzeugen, übergeben, zurückgeben und vernichten einer kopie und anschließendes überschreiben des originals.