2010-10-23 8 views
5

Questo codice deve saltare lo spazio bianco e restituire una parola alla volta. Un paio di domande su questo codice: quando il codice arriva alla * parola ++ = c; linea ottengo un core dump. Ho scritto questa riga correttamente? ed è di ritorno corretto. E ho bisogno di allocare in qualche modo la memoria per memorizzare la parola?Salta spazio bianco e restituisce una parola alla volta in C

//get_word 

int get_word(char *word,int lim){ 
int i=0; 
int c; 
int quotes=0; 
int inword = 1; 

while(
     inword && 
     (i < (lim-1)) && 
     ((c=getchar()) != EOF) 
    ){ 

    if(c==('\"')){//this is so i can get a "string" 
    if (quotes) { 
     inword = 0; 
    } 
    quotes = ! quotes; 
    } 
    else if(quotes){ //if in a string keep storing til the end of the string 
    *word++=c;//pointer word gets c and increments the pointer 
    i++; 
    } 
    else if(!isspace(c)) {//if not in string store 
    *word++=c; 
    i++; 
    } 
    else { 
    // Only end if we have read some character ... 
    if (i) 
     inword = 0; 
    } 
} 
*word='\0';       //null at the end to signify 
return i;        //value 

}

risposta

2

E 'impossibile dire perché questo core dump senza vedere il codice che chiama get_word. L'errore sulla linea che hai chiamato implica che lo stai passando qualcosa di non valido nel primo parametro. Non c'è niente di sbagliato in quella linea di per sé, ma se word non punta alla memoria scrivibile abbastanza grande da contenere i caratteri di output, sei nei guai.

La risposta alla tua domanda sull'allocazione della memoria per trattenerlo è sì, tuttavia potrebbe essere locale (ad esempio un array di caratteri nelle variabili locali del chiamante, globali o basate su heap (ad esempio da char * wordHolder = malloc(wordLimit);). chiedendo questo supporta l'ipotesi che il valore del parametro 1 è il problema

+0

Ti dispiacerebbe se rimuovo il cast dal valore restituito di 'malloc'? –

+0

@R .., senza questo viene visualizzato un errore di compilazione dal' malloc 'restituisce' void * ': errore C2440: 'initializing': non può convertire da 'void *' a 'char *' La conversione da 'void *' al puntatore a non-'oid richiede un cast esplicito" –

+0

@Steve: Then probabilmente stai usando un compilatore C++ per compilare il codice C :) – fredoverflow

Problemi correlati