|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
[c/c++]problema sscanf
buon giorno!!!
sto sviluppando un demonuccio in c++. a un certo punto devo fare il parse di un file che ha +/- questo aspetto: Codice:
08048000-080d4000 r-xp 00000000 03:02 123521 /usr/sbin/named 080d4000-080d6000 rw-p 0008b000 03:02 123521 /usr/sbin/named 080d6000-08152000 rw-p 080d6000 00:00 0 [heap] 44def000-44e05000 r-xp 00000000 03:02 27248 /lib/ld-2.3.2.so 44e05000-44e06000 rw-p 00015000 03:02 27248 /lib/ld-2.3.2.so 44e08000-44f32000 r-xp 00000000 03:02 77965 /lib/tls/libc-2.3.2.so 44f32000-44f3b000 rw-p 00129000 03:02 77965 /lib/tls/libc-2.3.2.so 44f3b000-44f3d000 rw-p 44f3b000 00:00 0 b7eb4000-b7f17000 rw-p b7eb4000 00:00 0 b7f26000-b7f27000 rw-p b7f26000 00:00 0 bfa11000-bfa27000 rw-p bfa11000 00:00 0 [stack] ffffe000-fffff000 ---p 00000000 00:00 0 [vdso] la soluzione iniziale (funzionante) era questa: Codice:
char * Filter::getNextLibrariePath(FILE **file){
char* libraryPath;
char permissions[1024];
char *temp = NULL;
size_t dim;
FILE* proc = *file;
libraryPath = new char[4096];
while(1){
if((fscanf(proc,"%*s %s",permissions)) != 1){
break;
}
if(strstr(permissions,"x") == NULL){
getline(&temp,&dim,proc);
continue;
}
if((fscanf(proc,"%*s %*s %*s %s",libraryPath)) != 1){
break;
}
return libraryPath;
}
return NULL;
}
allora con è uscito questo: Codice:
char * Filter::getNextLibrariePath(char **file){
char* libraryPath;
char permissions[1024];
char** proc = file;
int read;
libraryPath = new char[4096];
while(1){
if((sscanf(*proc,"%*s %s%n",permissions, &read)) != 1){
break;
}
*proc += read;
if(strstr(permissions,"x") == NULL){
char tmp;
while(sscanf(*proc, "%c%n", &tmp, &read) == 1){
*proc += read;
if(tmp == '\n'){
break;
}
}
continue;
}
if((sscanf(*proc,"%*s %*s %*s %s%n",libraryPath, &read)) != 1){
break;
}
*proc += read;
return libraryPath;
}
return NULL;
}
io non riesco a trovare il problema.... ciao! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
uppete!
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Prova a cambiare metodo, ad esempio usando una regular expression :
http://www.gnu.org/software/libc/man...%20Expressions Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:12.



















