c void pointer function cast

temp1

Grünschnabel
Hallo,

Dieses Beispiel zeigt was ich machen möchte.

Code:
#include<stdlib.h>
#include<stdio.h>

void change(int *p) {
       *p += 21;
}

int main() {
	int n=21;
	change(&n);
	printf("%i\n",n);
	return 0;
}



die Aufgabenstellung erfordert diese Signatur.
Code:
void upperLetter(void* head){
	char c = *((char*)head); //lese character aus head Pointer
	c-=32; // a -> A, b -> B, ... , z -> Z
	printf("%c\n",c); /Ausgabe zum testen.
       //Das auslesen des Wert klappt.

       //mittels Dereferenzierung möchte ich den Wert, auf den der Pointer zeigt, wieder verändern aber der void Pointer
       //macht mir irgendwie Probleme. Was hab ich nicht richtig gemacht? Wie muss ich casten damit sich der Wert hinter
       //dem void Pointer verändert?
      *((char*)head) = c; // klappt net .....:-(
}

Danke für die Hilfe!
 
Hallo temp1

Wie rufst du die Funktion auf? Welchen Fehler erhälst du? Was funktioniert nicht?

Viele Grüsse
Cromon
 
//*((char*)head) = c;
Diese Zeile führt zu einem Fehler das Programm stürzt ab.
Mache es unter Eclipse "Main.exe funktioniert nicht mehr..."

Habe den Eindruck dass es hier dran liegt

char *str1 = "a";

char s ='a'

dürfte gehe.... aber wie mache ich das dann für einen String?



Code:
#include<stdlib.h>
#include<stdio.h>

void upperLetter(void* head){
	char c = *((char*)head);
	c-=32;
	printf("%c\n",c);
	//*((char*)head) = c;  // fuehrt zum Fehler
}

int main(){
	void* head;
	char *str1 = "a";
	head = str1;

	upperLetter(head); // <<------- HIER der Aufruf
	printf("%c",*((char*)head)); //erwartetes Ergebnis: A

	return 0;
}


Der obige Code ist nur eine vereinfachte Version.
ich hab den void Pointer in einer Struktur und bekomme beim Auruf Probleme
mit dem void casten das klappt irgendwie net so wie gedacht.
printf("header %c \n", this->head);
 
Zuletzt bearbeitet:
Hallo,

dein Problem scheint eher zu sein, dass str1 ein Pointer auf einen statischen String und nicht auf einen Speicherbereich ist. Bau mal deine main() so um:

C:
#define str1size 10

int main(){
    void* head;
    char *str1 = malloc(str1size);
    head = str1;
    strcpy(str1, "a");
 
    upperLetter(head); // <<------- HIER der Aufruf
    printf("%c",*((char*)head)); //erwartetes Ergebnis: A
 
    free(str1);
    return 0;
}

Also noch mal zum leichteren Verständnis: Wenn du str1 auf einen statischen String wie "a" zeigen lässt, kannst du den Inhalt von str1 nicht ändern. Dafür brauchst du einen dynamischen Speicherbereich entweder mit malloc() auf dem Heap oder durch die Definition als Variable in Form eines Character-Arrays.
 

Neue Beiträge

Zurück