Newsgroup: it.comp.lang.c++
Titolo: Token da stringa, strtok deprecata, cosa in alternativa?

Salve a tutti, sto scrivendo un programma in C++, con visual studio2005 
e devo estrarre i token da una stringa.
Ho provato ad utilizzare strtok ma il compilatore mi dice che è 
deprecato, quale classe o funzione posso utilizzare in alternativa?
Grazie, ciao ciao.


Attento che VC++2005 da per deprecata quasi l'intera libreria standard
del C++. I maligni pensano che sia una manovra per spargere FUD e
spingere la gente verso .NET .
Se e' opportuno usare o meno strtok e' un altro problema. In Boost ci
sono le librerie Tokenizer e RegExpr, che a seconda delle necessita'
possono fare al caso tuo. Parti da 
http://boost.org
 .
Ciao,
Nicola

Nicola Musatti ha scritto:

Grazie, per l'informazione, allora uso strtok anche perchè non devo fare 
moltissimo devo estrarre un numero da una stringa, tutto qui.
Grazie ancora, ciao ciao.

 possono fare al caso tuo. Parti da 
http://boost.org
 .
In particolare strtok mi viene data  deprecata anche dalle man page. Dicono di
usare strsep  (se non per  questioni di portabilità).  Lo standard C99  non da
tuttavia     nessun     indizio      sulla     sua     reale     deprecazione.
-- 
-enrico

 tuttavia     nessun     indizio      sulla     sua     reale     deprecazione.
Perché fai riferimento allo standard C99?
Stiamo sempre parlando di C++.
Kiuhnm

tuttavia     nessun     indizio      sulla     sua     reale     deprecazione.
Ma ti piace davvero scrivere cosě ?? :-P

 Perché fai riferimento allo standard C99?
Perchè strtok è dichiarata in cstring, che è uno dei 18 header che la
libreria standard del C++ mutua da quella del C. Questi header
corrispondo ad altrettanti header standard del C90 come si evince da
Except as noted in clauses 18 through 27, the contents of each
headercnameshall be the same as that of the 
corresponding headername.h, as specified in ISO/IEC 9899:1990
Programming Languages C (Clause 7), 
or ISO/IEC:1990 Programming Languages—C AMENDMENT 1: C Integrity,
(Clause 7), as appropriate, 
as if by inclusion.
Non essendo deprecata in C99, ho dedotto che non lo fosse neppure in
C90.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

tuttavia     nessun     indizio      sulla     sua     reale     deprecazione.
Non è molto importante che lo standard ne decreti la "deprecazione",
quanto il modo in cui strtok() è implementata.  L'impossibilità di
usarla in un contesto multithread la taglia già fuori.

 Ma ti piace davvero scrivere così ?? :-P
No. Purtroppo ero fuori sede e mi sono dovuto organizzare con slrn + un
editor che automaticamente fa il softwrap (e il comando che io credevo
facesse l'hard wrap invece faceva anche la giustificazione). :)





Anche in single thread, non va bene. In ogni caso, se non è
deprezcicata, il comità C (e avanti Posix) a communque trovato
utile a definire un alternativo. Il scelto della parole di VC++
è un po sfortunato, ma il principe (al meno in caso strtok) è
giusto.
--
James Kanze                                           GABI Software
Conseils en informatique orientée objet/
                   Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, 
+33 (0)1 30 23 00 34

Enrico 'Mc Osten' Franchi wrote:

Perche' e' Microsoft che ha deciso unilateralmente di deprecare
praticamente tutta la libreria standard, non il comitato di
standardizzazione.
Ciao,
Nicola

 usarla in un contesto multithread la taglia già fuori.
Vero, anche se, andando per un attimo OT, io ne trovo anche una versione
reentrante strtok_r.


 standardizzazione.
No, io non so nemmeno dove sta di casa Microsoft. Mi risulta dalle man
page di strtok su MacOS X e su GNU/Linux.
Immagino che sia un "deprecata" non a norma di standard, ma a norma di
buon senso (ovvero che chi la volesse usare sia a conoscenza del fatto
che ha un mucchio di problemi). Lo standard, dalle mie ricerche, la
considera perfettamente.
Diciamo che è uno "è sconsigliata".


 facesse l'hard wrap invece faceva anche la giustificazione). :)
Il risultato è carino però ^_^ Chissà se c'è pure in Thunderbird?? ^_^

 Il risultato è carino però ^_^ Chissà se c'è pure in Thunderbird?? ^_^
Magari qualche estensione...


 una versione reentrante strtok_r.
Perche strtok_r è il surrogato Posix, quando Posix a visto che
non va bene strtok. Dal comite C, invecci, si chiama strtok_s.
Con un parametro di più, ma sempre con una semantica viziata.
Il pagine di man su Linux le dice nel miglior modo possibile:
"Never use these functions [strtok, strtok_r]." Credo che è
quello che voleva dire Microsoft con deprecato, anche se non è
davvero la parola giusta.
--
James Kanze (Gabi Software)              email: 
kanze...@neuf.fr
