Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 30
  1. #11
    Originariamente inviato da oregon
    Ma che senso ha fare quell'incremento?
    Beh ho creato un vettore di puntatori a caratteri; ognuno dei puntatori dovrebbe puntare a una stringa di testo. Dopo aver analizzato la prima stringa di testo, come faccio a passare all'analisi della stringa successiva?? Perchè non è corretto quell'incremento?

  2. #12
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prima del ciclo scrivi

    char *pw = word[0];

    e nel ciclo fai

    pw++;

    Ma attento ... hai allocato il vettore di puntatori ma non lo spazio per ogni singola stringa allocata.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #13
    Originariamente inviato da oregon
    Prima del ciclo scrivi

    char *pw = word[0];

    e nel ciclo fai

    pw++;

    Ma attento ... hai allocato il vettore di puntatori ma non lo spazio per ogni singola stringa allocata.
    Questo è vero, ma a questo punto non è corretto lasciare le stringhe di dimensione variabile, senza allocargli uno spazio di memoria prestabilito?
    Comunque ora non mi genera più l'errore in compilazione. Non c'è comunque un modo per accedere alla posizione attuale del vettore *word senza creare un nuovo puntatore?

    Continuo comunque ad avere questo noiosissimo errore di segmentazione

  4. #14
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da tigerjack89
    Questo è vero, ma a questo punto non è corretto lasciare le stringhe di dimensione variabile, senza allocargli uno spazio di memoria prestabilito?
    Una stringa deve avere una dimensione, in un certo momento. Non esiste una "stringa a dimensione variabile".

    Comunque ora non mi genera più l'errore in compilazione. Non c'è comunque un modo per accedere alla posizione attuale del vettore *word senza creare un nuovo puntatore?
    No ... word è il nome del vettore e il suo valore è costante (punta al primo elemento, sempre).
    Un altro puntatore parte da quel valore e può variare. Ecco perché non hai più l'errore in compilazione.

    Continuo comunque ad avere questo noiosissimo errore di segmentazione
    Ovvio! Te l'ho detto, "hai allocato il vettore di puntatori ma non lo spazio per ogni singola stringa allocata." e quello causa l'errore di segmentazione (non è un errore noioso ... è un errore grave ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #15
    Però scusa, quando io uso ad esempio il char *argv[] del main, non so in anticipo quale sarà la lunghezza in ingresso della stringa ottenuta. Qual è la differenza con il char *word[] che uso io??
    Perdona queste domande che a te sembreranno banali

  6. #16
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non è di dimensione variabile, è di dimensione zero, non c'è proprio memoria allocata.Al primo carattere che scrivi va in segmentation fault.
    Usa l' allocazione dinamica : malloc (o calloc), e per l' input ti consiglio di usare fgets (la trovi sempre su c++ reference).

  7. #17
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da tigerjack89
    Però scusa, quando io uso ad esempio il char *argv[] del main, non so in anticipo quale sarà la lunghezza in ingresso della stringa ottenuta. Qual è la differenza con il char *word[] che uso io??
    Il tuo *word è uguale all' *argv

    Ma ogni puntatore ad una stringa valida di *argv è assegnato a memoria allocata dal sistema operativo. Cosa che tu non fai.

    Perdona queste domande che a te sembreranno banali
    Non ti preoccupare ... ma rivedi il capitolo delle stringhe e dell'allocazione di memoria ... :-)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #18
    Originariamente inviato da oregon
    Non ti preoccupare ... ma rivedi il capitolo delle stringhe e dell'allocazione di memoria ... :-)
    Il problema è che non si capisce una mazza
    Davvero, sto imparando molto di più girando sul web alla ricerca di informazioni che dal mio libro, che pure dovrebbe essere la bibbia del linguaggio C. In effetti le funzioni di allocamento della memoria non le ho ancora trattate e penso facciano parte dell'ultimo capitolo del libro, ma più o meno ne ho capito il funzionamento da vari esempi in rete.

    Però, come dicevo, sul libro questi problemi di allocazione della memoria non se li fa proprio, e presenta la getword e il main in questo modo; da quello che ho capito da niubbo in materia, però, così facendo analizza solo il primo carattere della stringa in ingresso, mentre a noi interessa conoscere la parola in ingresso. O sbaglio??
    codice:
    int main()
    {
    	char word[MAX_WORD];
    	struct key *p;
    	
    	while (getword(word, MAX_WORD) != EOF)
    		if (isalpha(word[0]))
    			if ( (p = binsearch(word, keytab, NKEYS)) != NULL)
    				p->count++;
    	
    	for (p = keytab; p < keytab + NKEYS; p++)
    		if (p->count > 0)
    			printf("%4d %s\n", p->count, p->word);	
    	
    	return 0;
    }
    
    int getword(char *word, int limit)
    {
    	int c;
    	char *w = word;
    	
    	while (isspace (c = getch()) )
    		;
    	if (c != EOF)
    		*w++ = c;
    	else
    		return EOF;
    		
    	if (!isalpha(c) )
    	{
    		*w == '\0';
    		return c;
    	}
    	
    	while (--limit > 0)
    	{
    		if (!isalnum(*w = getch()))
    		{
    			ungetch(c);
    			break;
    		}
    		w++;
    	}
    	
    	*w = '\0';
    	return word[0];
    }

  9. #19
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Attenzione ... una cosa è

    char *word[MAX_WORD];

    e un'altra

    char word[MAX_WORD];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #20
    Originariamente inviato da oregon
    Attenzione ... una cosa è

    char *word[MAX_WORD];

    e un'altra

    char word[MAX_WORD];
    Sisi, vero. Quello che vorrei capire è, se usando char word[MAX_WORD], il programma dovrebbe funzionare. Perchè a me sembra sbagliato proprio nel ragionamento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.