Portál AbcLinuxu, 13. května 2025 23:09

Dotaz: Ukazatel na text.

31.5.2007 22:56 Pepa
Ukazatel na text.
Přečteno: 117×
Odpovědět | Admin
Ahoj,
mam mensi problem.

char *pT = "abcd";
a ted potrebuji zmenit text abcd na Zbcd
zkousel jsem pT[0] = 'Z'; ale nejde to pri prekladu mi to napise chybu.

DIKY za radu.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Bluebear avatar 31.5.2007 23:30 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
Rozbalit Rozbalit vše Re: Ukazatel na text.
Odpovědět | | Sbalit | Link | Blokovat | Admin
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.
To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
1.6.2007 08:35 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Ukazatel na text.
Odpovědět | | Sbalit | Link | Blokovat | Admin
>nejde to pri prekladu mi to napise chybu.

Akú?
$ 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";

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.