Forum: Mikrocontroller und Digitale Elektronik C Programierung Pointer (die 100te)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von hErR_wuut (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
irgendwie habe ich gerade ein Brett vor dem Kopf, und mir fehlen 
irgendwie auch die richtigen Suchbegriffe.
also dann mal los, was ich machen möchte ist dass ich einer Funktion 
eine Variable übergebe, in der dann innerhalb der Funktion eine 
(pointer) Adresse geschrieben wird.

hier mein Ansatz welcher aber zu einer warnung inkompatieble typen führt
1
char *ptrGlobal;
2
const char textGlobal[] = "test text";
3
4
void myFunk(char **ptrVar)
5
{
6
    *ptrVar = textGlobal;
7
}  
8
9
main()
10
{
11
    char *local = null;
12
    myFunkt(&local);
13
}

von Christopher B. (chrimbo) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
hErR_wuut schrieb:
> char *local = null;
const char *local = null;

von Programmierer (Gast)


Bewertung
1 lesenswert
nicht lesenswert
hErR_wuut schrieb:
> char *local = null;

Was ist "null"?

hErR_wuut schrieb:
> *ptrVar = textGlobal;

textGlobal ist "const char*". Du musst den Parameter Typ als "const 
char**" definieren.

von Stefan ⛄ F. (stefanus)


Bewertung
2 lesenswert
nicht lesenswert
Es wäre sehr hilfreich gewesen, die Meldungen des Compilers zu zitieren:
1
test.c: In function ‘myFunk’:
2
test.c:6:13: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
3
     *ptrVar = textGlobal;
4
             ^

textGlobal ist ein unveränderbarer String.
ptrVar ist ein Zeiger auf einen änderbaren String.

Deswegen soll ptrVar nicht auf textGlobal zeigen. Die Typen passen nicht 
zusammen.

Lösung:
1
const char textGlobal[] = "test text";
2
3
void myFunk(const char **ptrVar)
4
{
5
    *ptrVar = textGlobal;
6
}  
7
8
int main()
9
{
10
    const char * local = 0;
11
    myFunk(&local);
12
}

> const char *
Bedeutet: Ein änderbarer Zeiger auf einen nicht änderbaren String.

Nachtrag: Hoppla, andere haben mich beim Antworten überholt.

: Bearbeitet durch User
von hErR_wuut (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

vielen Dank erst mal,

leider habe ich da beim vereinfachen ein paar Fehler eingebaut welche im 
eigentlich Programm garnicht drin sind :(

auf jeden Fall super wie einem hier geholfen wird. Um das Problem auf zu 
lösen
(und das ist mir jetzt echt peinlich) ich hatte an einer Stelle char 
verwendet und an einer anderen uint8_t. Das sollte so natürlich nicht 
sein, und wurde zurecht angemeckert.

von Falk B. (falk)


Bewertung
2 lesenswert
nicht lesenswert
hErR_wuut schrieb:
> leider habe ich da beim vereinfachen ein paar Fehler eingebaut welche im
> eigentlich Programm garnicht drin sind :(

Und mal wieder bewiesen, daß man immer ORIGINALQUELLTEXT als Anhang 
vorzeigen sollte.

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]
  • [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.

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