C Programierung Pointer (die 100te)

Gast #6477120
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
}
Gast #6477126
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.
Gast #6477132
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren