[LUGOS-PROG] kaj pomeni 'const char *p'

Rok Papež rok.papez at lugos.si
Mon Feb 24 11:23:13 CET 2003


Zivjo Jure!

Dne ponedeljek 24. februar 2003 02:13 je Jure Pecar napisal(a):

> const char *p;
>
> v teku programcka je prva stvar, ki se s tem pointerjem zgodi, tole:
>
> *p = *q;

Ce p ni inicializiran lahko kazhe kamorkoli. Z *p ga dereferencirash in torej 
naredish dostop do pomnilnika na "nakljucni" naslov.
SIGSEGV as it should be :->.

No pa poglejmo kaj prevajalnik izpljune:
---------------------------------------------
[rok at Strader rok]$ cat /etc/redhat-release 
Red Hat Linux release 7.3 (Valhalla)
[rok at Strader tmp]$ gcc 1.c -Wall -g
1.c: In function `main':
1.c:8: warning: assignment of read-only location
[rok at Strader tmp]$ ./a.out 
Segmentation fault

[rok at Strader tmp]$ cat 1.c
------------------------------
#include <stdio.h>
#include <stdlib.h>

char *str = "1";
const char *q;

int main() {
        *q = *str;
        printf("%c\n", *q); 
        return 0;       
}

> kar je zanimivo, je da mi na redhat 7.1 to dela b.p., na 7.3. pa pri tej
> priredbi segfaulta. z nekaj printfji sem ugotovil, da je *p NULL. kako to?

Dela ti, ker imash drugachno okolje v katerem se program zazene.. ocitno se 
pod 7.1 spremenljivka p inicializira na nek "delujoc" naslov.

-- 
best regards,
Rok Papež.




More information about the lugos-prog mailing list