Forum: Compiler & IDEs Char array von funktion beschreiben lassen


von liopleurodon (Gast)


Lesenswert?

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';
}

von ... (Gast)


Lesenswert?

Nein! Schon deshalb nicht, weil Du gar kein Array hast"! Du hast nur 
einen Zeiger auf char

von Helfer (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
}

von ... (Gast)


Lesenswert?

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.

von liopleurodon (Gast)


Lesenswert?

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";
}

von Karl H. (kbuchegg)


Lesenswert?

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)

von DirkB (Gast)


Lesenswert?

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.

von liopleurodon (Gast)


Lesenswert?

werde mir das mal in ruhe durchlesen.
printf habe ich keins, das läuft auf nem microcontroller

von DirkB (Gast)


Lesenswert?

liopleurodon schrieb:
> printf habe ich keins, das läuft auf nem microcontroller

Dann teste es doch auf dem PC oder auf http://codepad.org

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.