PDA

Visualizza la versione completa : [C] funzione per prendere solo seconda parte di una stringa


qotsa
20-06-2010, 12:40
Ciao!
non riesco a scrivere una funzione funzionante per prendere la seconda parte di una stringa...ho provato ad utilizzare sprintf e delle combo delle funzioni della libreria string.h ma non ho risolto

quanlcuno di voi sa se esiste gi una funzione che non ho trovato per prendere:
frase--> ciao mamma
vorrei avere --> mamma (salvato in un puntatore)

potrebbe essere un problema banale ma non sono riuscito a risolverlo!
grazie anticipatamente. Ciao!

sebaldar
20-06-2010, 12:44
http://www.cplusplus.com/reference/clibrary/cstring/strstr/

oregon
20-06-2010, 12:45
string.h non una libreria ma un semplice file include.

In ogni caso, tu sai quale parte della stringa devi prendere (conosci la posizione del carattere da cui inizia la parte che ti interessa) o devi cercare una stringa all'interno dell'altra per conoscere tale posizione?

Nel primo caso, utilizzi l'aritmetica dei puntatori, nel secondo, la funzione strstr

qotsa
20-06-2010, 13:07
mmm allora io mi ricerco la posizione da dove inizia la stringa che voglio estrapolare! ma come faccio a salvare la seconda parte solo con l'aritmetica dei puntatori??

ho provato con :

void *sec_arg=NULL; //VARIABILE GLOBALE con una calloc ampia abbastanza

....
char *buf;
.... //for per trovare inizio parola
sec_arg=&(buf[occ]); // con occ che la posizione da cui inizia il secondo arg
....

ma cosi quando passo sec_arg ad una funzione (che dentro un altra funzione) mi da segmentation fault ma nella stampa per vedere se ha immagazzinato ok stampa bene (con dovuto cast a char*)!

sebaldar
20-06-2010, 13:14
copiala con strcpy in una nuova variabile prima di usarla

qotsa
20-06-2010, 13:24
Allora scusate ma ho capito male il problema che mi era stato posto:
io devo prendere in input una stringa tipo "check 0x10000000" e quindi devo estrarre l'indirizzo (0x10000000) per poi far puntare a sec_arg questa locazione di memoria......infatti poi quando passo sec_arg a questa funzione deve lavorare su quella locazione!!!

quindi ora riuscendo ad estrarre la seconda parte (l'indirizzo) come faccio a far puntare *sec_arg a quella locazione??

non ricordo bene ... essendo cmq sec_arg un void * e la stringa da cui estrapolo un char * (tra l'altro ora di sicuro devo usare una variabile d'appoggio!)

scusate ancora per il franteindimento!

oregon
20-06-2010, 13:53
Locazione di memoria?

Adesso la cosa si fa pi confusa ...

Tanto per cominciare, la stringa

"check 0x10000000"

comincia sempre in quel modo o la parte numerica pu essere da un'altra parte?

Se la posizione sempre quella (ovvero ad 8 caratteri dall'inizio), allora devi usare la funzione

strtol

per convertire il valore da stringa a long in base 16, assegnando (con un cast) ad un puntatore ad unsigned char

Loading