www.mikrocontroller.net

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


Autor: Nixwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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'?

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1: Ja.

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nixwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nixwisser wrote:

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

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

Autor: Nixwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nixwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nixwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nein.
>Dazu müsstest du einen Pointer auf einen Pointer übergeben.

Verstehe. Danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.