Article View: pl.comp.lang.c
Article #482Re: C.D. Segmentation fault przy strtok...
From: Qrczak
Date: Fri, 26 Dec 1997 08:39
Date: Fri, 26 Dec 1997 08:39
65 lines
2837 bytes
2837 bytes
Followup-To: pl.comp.lang.c
On 26 Dec 1997, Rav wrote:
> Ale mam kolejne pytanie. Rezultatem strtok jest char* dlaczego
> wiec przy:
>
> main()
> {
> char *slowo;
> char *linia="la la la";
>
> slowo=strtok(linia," ");
> retun 0;
return 0;
> }
>
> kompilacja konczy sie "warning:invalid assigment of integer
> value to pointer without cast" (lub cos takiego, pisze z pamieci).
Bo brakuje #include <string.h> i on nie wie, że to jest char *, domyślnie
przyjmuje int.
Pretensje kierować do autorów C, że w ogóle pozwolili używać funkcji bez
prototypów.
Poza tym w man strtok pisze jak byk:
BUGS
This function modifies its first argument. The identity
of the delimiting character is lost.
Więc nie można tak wywoływać, bo wartości *linia nie można zmieniać! W tym
przypadku lepiej zrobić deklarację linia[] = "la la la";, co przy okazji
trochę przyspieszy kod (bo wskaźnik linia będzie stałą, a nie zmienną;
linia[3] to będzie ustalone miejsce w pamięci, a nie wartość zmiennej
wskaźnikowej z dodaną trójką).
Pretensje kierować do autorów C, że stałe łańcuchowe są typu char *, a nie
const char *, tzn. że nie wymuszają używania const.
> I jeszcze jedne problem. Czy mozna w sposob elegancki
> przypisac zmiennej typu: char zmienna[30] ciag, ktorego
> pierwszy znak jest wskazywany przez zmienna typu char* i
> konczacy sie \0 ?
> Elegancki tzn nie w petli przypisujacej kazdemu elementowi
> zmienna[30] kolejne wskazania drugiej zmiennej.
strcpy (zmienna, ciag);
To oczywiście wewnętrznie przepisze wszystkie znaki, bo jak to sobie
inaczej wyobrażasz? Gdyby zmienna była typu char *, toby można było
przepisać sam wskaźnik (pamiętając o różnych tego konsekwencjach).
Polecam man 3 string.
BTW: Nigdy nie używałem strtok. Wystarczyło poczytać mana.
-- o
/\ QRCZAK #
__("< Marcin Kowalczyk #*#
\__/ qrczak@knm.org.pl #\#&#
^^ http://qrczak.home.ml.org/ I
Technical Details
Message-ID:
<Pine.LNX.3.96.971226092616.28295A-100000@qrnik.knm.org.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczakReferences:
<199712260255.DAA21573@sprocket.ict.pwr.wroc.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczak From: Qrczak <qrczak@knm.org.pl> Newsgroups: pl.comp.os.linux,pl.comp.lang.c Subject: Re: C.D. Segmentation fault przy strtok... Followup-To: pl.comp.lang.c Date: Fri, 26 Dec 1997 09:39:58 +0100 Organization: Klub Nieszkodliwych Manjaków Lines: 66 Message-ID: <Pine.LNX.3.96.971226092616.28295A-100000@qrnik.knm.org.pl> References: <199712260255.DAA21573@sprocket.ict.pwr.wroc.pl> NNTP-Posting-Host: ppp3-cst145.warszawa.tpnet.pl Mime-Version: 1.0 In-Reply-To: <199712260255.DAA21573@sprocket.ict.pwr.wroc.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit