Ez ilyen vak vezet világtalan lesz, mert én is sokszor kipróbálom, amikor ezekre szükségem van.
Egyrészt nem mondtad, mi az a fordítási hiba. Írd le a hibaüzenetet! Másrészt nem mindegy, hogy a string egy read only területen, például flash memóriában tárolt karakter lánc, amelyre mutat egy RAM-ban tárolt, így felülírható pointer, vagy a pointer az, ami nem változtatható meg.
char* valtozo = FIX;
szerintem azért problémás, mert a pointereknek van típusuk, nem void * az összes. Tehát, ha egy olyan típusú pointernek adsz értéket, ami azt tudja magáról, hogy az általa címzett memóriatartalom írható, olvasható, s egy olyan címet kap értékül, amelyen lévő tartalom nem írható, akkor a fordító szorongani kezd, s attól tart, hogy a későbbiekben csinálsz valami ilyesmit:
*(valtozo + 2) = 'A';
Szerintem lehetőséged van erre:
const char *valtozo;
valtozo = FIX;
valtozo++;
printf("%c\n", *valtozo);
Vagy csinálhatod ezt:
char *valtozo;
valtozo = (char *) FIX;
Csak ez utóbbi esetben úttörő becsszóra ne próbálj *valtozo-nak értéket adni, mert abból tényleg segfault lesz.