|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
[C]ripulire le stringhe fino al loro ultimo contenuto significativo...
una volta che ho copiato una stringa dentro un buffer,rimangono delle posizioni del buffer inizializzate a caratteri incomprensibili.
come faccio a ripulire la stringa fino all'ultimo carattere significativo? avevo pensato ad allocare un altra area di memoria con un altro puntatore a stringa grande quanto strlen(stringa sporca),ma stampandone il risultato sembra che strlen tenga conto dello spazio inutilizzato... |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Posta il codice che vediamo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
il problema è un pò più complicato,devo prendere una stringa e a seconda degli argomenti,decidere cosa fare.
ho fatto una sscanf sulla stringa in input con il numero massimo degli argomenti da leggere,con i rispettivi caratteri di formattazione. il problema è che quando c'è un comando che richiede argomenti minori del massimo,per fare le cose fatte bene devo verificare che le altre aree riservate alle stringhe non siano inizializzate,o abbiano un contenuto insignificvativo. ad esempio,un comando che ha la semantica PRINT NOMEFILE,se dopo l'utente scrive altre cose,devo far si che il comando non abbia più alcun senso,se invece controllo solo i primi due argomenti e gli altri li lascio perdere l'utente potrebbe permettersi di scrivere quello che gli pare,avendo comunque attivato il comando.. insomma avevo pensato a una cosa simile... ti passo un frammento: arg2 = (char *)malloc(sizeof(char)*N); diff = strlen(comandi); effettivo = (char *)malloc(sizeof(char)*diff); strcpy(effettivo,comandi); sscanf(effettivo,"%s %s %s %s",arg1,arg2,arg3,arg4); //controllo sulla stringa per vedere cosa ho inizializzato printf("arg1 = %s arg2 = %s arg3 = %s arg4 = %s\n",arg1,arg2,arg3,arg4); if(strcmp(arg1,"print") == 0 && arg2 != 0 && arg3 == 0 && arg4 == 0){ printf("%s %s\n",arg1,arg2); return 3;//ritornami il valore corrispondente al codice operativo print } else if....controllo simile,ma per altri comandi+ alla fine faccio ritornare un valore di errore dove so che il comando o non è stato scritto o è stato scritto male. spero di essere stato chiaro... ![]() grazie |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
il problema si risolve in parte se inizializzo ogni "arg" come puntatore a char,nel senso che quelli vuoti adesso se li stampo rimangono vuoti.
soltanto che non riesco a trovare il termine di confronto che nella guardia dell'if li fa riconoscere come inutilizzati.. NULL non funziona EOF mi dice che comparison between pointer e integer non si può fare "\0" non funziona ![]() |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Per il resto ... vedo che ci sono diverse altre variabili, arg3, arg4, ecc... che non sono come sono dichiarate. Se sono variabili 'automatiche' (locali ad una funzione) e non le hai inizializzate, chiaramente puoi avere molte brutte sorprese.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
arg3 e arg4 le alloco con una malloc all'inizio della funzione di grandezza prefissata.
se le inizalizzo a NULL i controlli mi funzionano!! sul problema di diff non mi dava segmentation fault,ma l'ho corretto ugualmente per ora considero il problema risolto alla prossima e grazie |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
PROBLEMA:se inizializzo un puntatore a char come NULL e poi con la sscanf ci vado a scrivere dentro perchè mi restituisce cmque NULL???????
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:09.