Hallo,
ich habe ein char array (string), welches ich von einer funktion füllen
will,
alleridngs komme ich immer mit den pointern durcheinandern.
stimmt das so???
void main
{
char * text;
fillaraay(&text);
}
void fillaraay(char * text)
{
text = 'bla';
}
Nein! Schon deshalb nicht, weil Du gar kein Array hast"! Du hast nur einen Zeiger auf char
Nö. > char * text; Unterschied Pointer und Array im C Buch nachlesen. Definition von Arrays im C Buch nachlesen. > text = 'bla'; Unterschied ' und " im C Buch nachlesen. > text = 'bla'; Doku zu strcpy() im C Buch nachlesen. > fillaraay(&text); >} > >void fillaraay(char * text) Deklaration von Funktionsprototypen im C Buch nachlesen. > void main Definition von Funktionen im C Buch nachlesen. Rückgabewert von main() gemäß Standard im C Buch nachlesen.
liopleurodon schrieb: > stimmt das so??? > > void main > { > char * text; Wo zeigt der Pointer hin? Das ist nur eine Pointervariable. Sie kann auf einen Speicherbereich zeigen. Nur: Wo ist der Speicherbereich, auf den du den Pointer zeigen lassen willst, so dass du dort Werte ablegen lassen kannst? In einem Pointer kannst du keinen String ablegen. Dazu brauchst du ein Array. > fillaraay(&text); > } > > void fillaraay(char * text) > { > text = 'bla'; Strings werden in C in " eingeschlossen. Ein einfaches ' ist ein einzelner Character, aber kein String -> C-Buch kaufen und durcharbeiten! http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
1 | void main |
2 | {
|
3 | char text[80]; |
4 | fillaraay(&text); |
5 | }
|
6 | |
7 | void fillaraay(char * text) |
8 | {
|
9 | strcpy( text, "bla" ); |
10 | }
|
1 | void fillaraay(char ** text); |
2 | |
3 | int main(void) |
4 | {
|
5 | char * text; |
6 | fillaraay(&text); |
7 | |
8 | return 0; |
9 | }
|
10 | |
11 | void fillaraay(char ** text) |
12 | {
|
13 | *text = "bla"; |
14 | }
|
So würde es gehen, ist aber mit Sicherheit nicht das was Du eigentlich willst. Und der Name der Funktion wäre dann auch falsch.
danke für die schnellen antworten.
d.h. das wären dann so oder?
void main
{
char text[5];
char * ptext;
ptext = &text;
fillaraay(ptext);
}
void fillarray(char * ptext)
{
*ptext = "bla";
}
liopleurodon schrieb: > danke für die schnellen antworten. > d.h. das wären dann so oder? Nein > > void main > { > char text[5]; > char * ptext; > ptext = &text; > > fillaraay(ptext); Wozu brauchst du ptext? Wenn du den Namen eines Arrays anführst, ohne eine Indexoperation [] darauf zu machen, dann gilt der Name des Arrays bereits als Pointer auf das erste Element fillarray( text ); > > } > > void fillarray(char * ptext) > { > *ptext = "bla"; ptext ist ein Pointer. Also ist *ptext, das, worauf der Pointer zeigt. Und das ist: ein Character, denn ptext ist ein Pointer auf einen Character ( char * ). Ein Character kann aber keinen String aufnehmen, sondern nur ein einzelnes Zeichen. Weiters: Ein String ist im Grunde auch nur ein Array. Und Arrays kann man nicht zuweisen! Aber es gibt vordefinierte Funktionen dafür. C-Buch kaufen Lies doch bitte wenigstens das hier http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F ehe du einen neuen Versuch startest (was unnötig ist, weil entsprechende Lösungen schon gepostet wurden)
Bei die zeigt jetzt ptext auf "bla". An text hast du nichts verändert. Mach doch einfach mal ein printf oder puts
1 | printf("ptext: %s; text: %s\n", ptext, text); |
Dann kannst du das sogar sehen.
werde mir das mal in ruhe durchlesen. printf habe ich keins, das läuft auf nem microcontroller
liopleurodon schrieb: > printf habe ich keins, das läuft auf nem microcontroller Dann teste es doch auf dem PC oder auf http://codepad.org
liopleurodon schrieb: > werde mir das mal in ruhe durchlesen. > printf habe ich keins, das läuft auf nem microcontroller Macht nichts. Du würdest sowieso nur sehen, dass * du deinen Code nicht durch den Compiler bringst * und wenn du ihn entsprechend änderst, es einfach nur kräftig im Blätterwald rauscht (den Abstürzen in dem Sinne kann ein µC nicht)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.