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


von hErR_wuut (Gast)


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


Lesenswert?

hErR_wuut schrieb:
> char *local = null;
const char *local = null;

von Programmierer (Gast)


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. (Gast)


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.

von hErR_wuut (Gast)


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)


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.

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.