🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #482

Re: C.D. Segmentation fault przy strtok...

#482
From: Qrczak
Date: Fri, 26 Dec 1997 08:39
65 lines
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!qrczak
References: <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