Forum: Compiler & IDEs Leeren String als Argument übergeben?


von Nixwisser (Gast)


Lesenswert?

Hallo,

ist es möglich, einer Funktion, die einen Pointer auf char erwartet, 
einen leeren String ("") zu übergeben? Bsp.: void foo (char *pstr) -> 
foo ("");

Wenn ja, was macht der Compiler daraus? Ist "" eine Konstante mit dem 
Inhalt '\0'?

von Urs (Gast)


Lesenswert?

1: Ja.

2: "" ist ein Zeiger auf ein const char 0.

von Stefan E. (sternst)


Lesenswert?

Nixwisser wrote:

> ist es möglich, einer Funktion, die einen Pointer auf char erwartet,
> einen leeren String ("") zu übergeben? Bsp.: void foo (char *pstr) ->
> foo ("");

Ja.

> Wenn ja, was macht der Compiler daraus?

Er übergibt der Funktion die Adresse einer im Speicher stehenden Null.

PS:
Ich hoffe nur, du denkst nicht, dass man diesen String dann in der 
Funktion irgendwie "füllen" könnte.

von Nixwisser (Gast)


Lesenswert?

>Er übergibt der Funktion die Adresse einer im Speicher stehenden Null.

0 im Klartext ist also equivalent zum ASCII-Ende-Zeichen \0?

>Ich hoffe nur, du denkst nicht, dass man diesen String dann in der
>Funktion irgendwie "füllen" könnte.

Nein ;)

von Stefan E. (sternst)


Lesenswert?

Nixwisser wrote:

> 0 im Klartext ist also equivalent zum ASCII-Ende-Zeichen \0?

Nein, es ist nicht äquivalent, es ist dasselbe.

von Nixwisser (Gast)


Lesenswert?

>Ich hoffe nur, du denkst nicht, dass man diesen String dann in der
>Funktion irgendwie "füllen" könnte.

Den Pointer könnte ich aber ändern, oder? Will heißen, innerhalb der 
Funktion  dem übergeben Pointer einen anderen String zuweisen.

von Stefan E. (sternst)


Lesenswert?

Nixwisser wrote:

> Den Pointer könnte ich aber ändern, oder? Will heißen, innerhalb der
> Funktion  dem übergeben Pointer einen anderen String zuweisen.

Ja, könntest du. Aber was hättest du davon? Das würde sich nur auf die 
Kopie des Pointers innerhalb der Funktion auswirken.

von Nixwisser (Gast)


Lesenswert?

>Ja, könntest du. Aber was hättest du davon? Das würde sich nur auf die
>Kopie des Pointers innerhalb der Funktion auswirken.

Es wäre ja auch möglich, dass der Aufrufer einen Pointer mit leerem 
Inhalt definiert hat und diesen beim Aufruf übergibt. Dann müßte doch 
der Pointer überschrieben werden, falls ich ihn in der Funktion 
manipuliere, und dann auch in der aufrufenden Funktion zur Verfügung 
stehen.

von Stefan E. (sternst)


Lesenswert?

Nixwisser wrote:

> Es wäre ja auch möglich, dass der Aufrufer einen Pointer mit leerem
> Inhalt definiert hat und diesen beim Aufruf übergibt. Dann müßte doch
> der Pointer überschrieben werden, falls ich ihn in der Funktion
> manipuliere, und dann auch in der aufrufenden Funktion zur Verfügung
> stehen.

Nein.
Dazu müsstest du einen Pointer auf einen Pointer übergeben.

von Nixwisser (Gast)


Lesenswert?

>Nein.
>Dazu müsstest du einen Pointer auf einen Pointer übergeben.

Verstehe. Danke.

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.