Portál AbcLinuxu, 13. května 2025 23:09
char *pT = "abcd";
Tímto řádkem jste nadeklaroval proměnnou typu "ukazatel na znak" a uložil do ní ukazatel na řetězcovou konstantu "abcd". Tu není možné změnit.
Můžete udělat například to, že zduplikujete řetězec "abcd" a do řetězce uložíte ukazatel na nově vzniklou kopii (to už není konstanta, protože vznikla až za běhu dynamickou alokací). Tu pak můžete měnit.
char *pT = strdup("abcd");
pT[0] = 'Z';
Samozřejmě pak musíte nově vytvořený řetězec uvolnit pomocí funkce free()
, až už ho nebudete potřebovat, jinak máte memory leak.
Pozn.: Pokud plánujete ve svém programu nějaké větší operace se stringy, myslím, že není dobrý nápad psát to v čistém Cčku; sice to jde, ale je to strašná otrava. V takovém případě by bylo lepší použít C++, které má přímo typ string
, který se chová jako primitivní hodnota.
$ gcc -Wall c.c
$ cat c.c
int main()
{
char *pT="abcd";
pT[0]='Z';
return 0;
}
$ gcc --version
gcc (GCC) 3.4.6
...
Možno lepšie by bolo:
char pT[]="abcd";
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.