On 12 Mar 2002 at 22:50, WolfMan wrote:
> Grazie per la reference, già prontamente scaricata, non è che non voglia
> usare string e la stl, solo che tutte le funzioni per gli stream su file
> hanno come parametro di ingresso un char *, dovrei addirittura aprire
> uno stream su stringa anche per usare i parametri forniti dalla funzione
> main [main(int argc char *argv[])], ora usare la funzione c_str di
> string non è una forzatura??(naturalmente la mia è solo una domanda).
Dipende da che cosa ci devi fare...
In fondo non credere che c_str() faccia niente di tremendo...
restituisce un puntatore... probabilmente una volta compilato il tutto
si risolve in un caricamento dello stack e/o in un mov.
Se hai 3 righe di codice E sei MOLTO attento a non sbordare dai buffer,
amen...
Poi c'è gente che programma allegramente in C... il C++ mica è una
prescrizione medica.
Un po' di considerazioni on the top of my mind
1) Il tuo programma prende input a manetta da stdio per i nomi di file,
non fa quasi niente ed esce...
punto critico fstream( const char *filename );
L'input dei nomi di file rappresenta una buona % del lavoro che fa il
tuo programma. Ti allochi il peggio che ti può capitare come lunghezza:
#include <limit.h> o #include <bits/posix1_lim.h> TRONCHI comunque
qualsiasi cosa che arriva più lunga e via...
2) il tuo programma non è molto impegnato sull'acquisire nomi di files
quanto a leggerli/processarli...
punto critico istream &read( char *buffer, streamsize num ); e compari
Ovvio che qua entrano molto in gioco le strategie di
lettura/scrittura/processing etc... Auguri...
Come al solito se il file è piccolo buffer grosso te lo ciucci tutto...
pace e amen...
Ma anche una volta che lo hai in memoria e lo devi processare... come
fai a inserire a metà una stringa (inteso char[])? Lasci li la prima
metà, allochi altra memoria in coda al buffer, sposti l'altra metà, ci
infili i char[].
Quante volte dovrai allargare il buffer? di quanto? Ha una struttura
interna che ne faciliterebbe la lettura casuale? e via discorrendo...
Queste cose SI FANNO sia in C che in C++...
vuoi fidarti della gestione della memoria più standard... OK usi le
STL... o ti scrivi il tuo gestore di memoria in C
non vuoi... ti scrivi un Allocator... o ti scrivi il tuo gestore di
memoria in C
Auguri...
--
Salve
Ivan Sergio Borgonovo
http://www.webthatworks.it/
find /home -iname "*spam*" | \
while read s; do rm -fr "$s";done && \
talk world
|