Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Forse ho trovato il modo di farlo, ma il programma mi va in SegFault e non riesco a capire perchè (gcc compila senza warnings).
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <string.h>
int main()
{
char*a, *b, *c;
a =strstr("aa<aa><username>admin</username>wdw","username");
a =strstr(a,">");
b =strstr(a,"<");
size_t n =strlen(a)-strlen(b);
strncpy(c,a,n);
printf("%s\n",c);
a =strstr(a,"password");
a =strstr(a,">");
b =strstr(a,"<");
n =strlen(a)-strlen(b);
strncpy(c,a,n);
printf("%s\n",c);
return0;
}
Non so cosa sbaglio nel codice, qualche illuminazione?
-- PS ---
Per me va anche meglio se mi dite come fare la stessa cosa in bash!
Voglio dire, lo split in bash riesco a farlo solo usando come delimitatore un carattere, mentre a me servirebbe inserire una stringa:
Cioè
Codice sorgente - presumibilmente Plain Text
tmp=`echo $config | cut -d'<username>' -f2`
Mi da errore perchè <username> è una stringa e bisogna usare un carattere per il delimitatore...
Grazie ma non ho risolto, al progetto che mi hai linkato gli ho dato una letta veloce, ma il codice è abbastanza lungo: a me serviva giusto una funzione.
NB: Non sono pigro ma il progetto non c'entrava comunque con la mia richiesta
Grazie,
aspetto qualche altra soluzione
Va bene anche se mettete a posto il codice che ho postato sopra, evitando il segfault!
Comunque è C, non C++
Ultima modifica effettuata da il 11/09/2009 alle 1:08
è un parser BASE di XML che estrae solo i valori compresi tra due tag, è in grado di capire se l'xml non è ben formattato. Non supporta gli attributi ed è case sensitive.
EDIT: Perchè non mi colora la sintassi?
Ultima modifica effettuata da HeDo il 11/09/2009 alle 12:21
()
Newbie
Messaggi: Iscritto:
Postato alle 14:58
Venerdì, 11/09/2009
Grazie mille, ottimo!! A parte il system("PAUSE); ... programmi su windows?
Credo che tu intendessi la funzione getchar()... credo che anche su windows ci sia, o almeno una simile.
Grazie mille, ottimo!! A parte il system("PAUSE); ... programmi su windows?
Credo che tu intendessi la funzione getchar()... credo che anche su windows ci sia, o almeno una simile.
32 sta per la lunghezza della stringa? Occorre cambiarlo a seconda della stringa, cioè della lunghezza del file xml?
si l'ho fatto sotto windows, e la GetField ha come parametri: il contenuto del file xml, il campo da cercare, un buffer nel quale mettere il valore del campo e la lunghezza di questo buffer.
dovrebbe funzionare tutto senza problemi anche sotto linux, testa e fammi sapere
Ultima modifica effettuata da HeDo il 11/09/2009 alle 17:01
()
Newbie
Messaggi: Iscritto:
Postato alle 19:57
Venerdì, 11/09/2009
Grazie mille ho risolto subito con poche modifiche: ecco il parser a cui bisogna passare una stringa o il contenuto di un file come arg1 e il campo da ricercare come arg2.
Ex:
./xmlparse "<config><username>tony</username><password>secret123</password></config>" username
./xmlparse `cat config.xml` username
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int GetField(char*pContent, char*pField, char*Buff, int iLen);