Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-08-2010, 00:23   #1
galefabio
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 13
[c] fscanf di una stringa enorme

Salve, allora questo è il mio problema, questo programma mi calcola quante parole ci sono in un file, io devo prendere delle stringhe dal un file, fin che le stringhe sono di 100 caratteri è tutto ok, quando sono 100000 caratteri mi va in errore di memoria chiaramente, non deve avere una limitazione, se io metto char *riga, mi da errore, come posso fare.

l'errore è EXC_BAD_ACCESS

Ecco il codice :
Codice:
 int nParole (FILE* fp, int string_lenght)  //FUNZIONE PER IL CONTEGGIO DELLE PAROLE NEL FILE
 {
 int j=0;
 char *riga;
 
 for( ; ; )
 {
 if (fscanf(fp, "%s", riga) != EOF) 
 j++;
 else
 return j;
 }
 }
galefabio è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 00:47   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Potresti cambiare approccio, invece di leggere parole intere leggi carattere per carattere e quando trovi un separatore (spazio o segno di punteggiatura ad esempio) sai che è terminata una parola.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 01:09   #3
galefabio
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 13
tipo cosi?
Codice:
char c;
int parola=0;
int n=0;//per vedere se ci sono parole o no
for( ; ; )
{
  c=fgetc(fp);
  if(c==' ') parola++;
  else if(c==EOF)
      {
        if(n==0)parola++;
         break;
      }
  else n=1;//c'è almeno un carattere e quindi almeno una parola
}
galefabio è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 01:12   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Sì, anche se i controlli che hai fatto non mi sembrano corretti...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 01:14   #5
galefabio
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 13
cioè?? prova a fari una bozza se ne hai voglia e tempo grazie
galefabio è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 01:33   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Codice:
char c;
int parola=0;
int n=0;//per vedere se ci sono parole o no
for( ; ; )
{
  c=fgetc(fp);
  if(c==' '){ if(n==1) parola++; n=0;
  }else if(c==EOF)
      {
        if(n==1) parola++;
         break;
      }
  else n=1;//c'è almeno un carattere e quindi almeno una parola
}
Così mi sembra giusto
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 09:03   #7
Darecon
Senior Member
 
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
Quote:
Originariamente inviato da galefabio Guarda i messaggi
Salve, allora questo è il mio problema, questo programma mi calcola quante parole ci sono in un file, io devo prendere delle stringhe dal un file, fin che le stringhe sono di 100 caratteri è tutto ok, quando sono 100000 caratteri mi va in errore di memoria chiaramente, non deve avere una limitazione, se io metto char *riga, mi da errore, come posso fare.

l'errore è EXC_BAD_ACCESS

Ecco il codice :
Codice:
 int nParole (FILE* fp, int string_lenght)  //FUNZIONE PER IL CONTEGGIO DELLE PAROLE NEL FILE
 {
 int j=0;
 char *riga;
 
 for( ; ; )
 {
 if (fscanf(fp, "%s", riga) != EOF) 
 j++;
 else
 return j;
 }
 }
Scusa ma sbaglio o riga non e' inizializzato?
Darecon è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 10:26   #8
galefabio
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 13
è utilizzato nella fscanf
galefabio è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 13:32   #9
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Quote:
Originariamente inviato da Darecon Guarda i messaggi
Scusa ma sbaglio o riga non e' inizializzato?
Hai ragione anche te
Quote:
Originariamente inviato da galefabio Guarda i messaggi
è utilizzato nella fscanf
Sì ma siccome il puntatore di destinazione (per l'appunto riga) non punta a nulla andrai a scrivere in una zona di memoria già impegnata o non allocata (e da qui comportamenti imprevisti o errori).

Ad ogni modo secondo me ti conviene continuare con l'approccio che ti ho suggerito se hai parole di lunghezza illimitata o molto grande.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 22:49   #10
galefabio
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 13
ho fatto cosi:

Codice:
while(c!=' ')
		{
			c=fgetc(input);
			caratteri++;
		}
		
		caratteri--;
		str=(char*)malloc(sizeof(char)*caratteri);
		fscanf(in,"%s", str);
ma da ancora errore EXC_BAD_ACCESS , i caratteri sono 1048576.

in e input puntato allo stesso file, ma input serve per i caratteri e in per le stringhe.

Come posso fare??
galefabio è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2010, 22:55   #11
galefabio
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 13
risolto, mancava il carattere di terminazione '\0'
galefabio è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2010, 09:11   #12
Infrid
Member
 
L'Avatar di Infrid
 
Iscritto dal: Oct 2005
Messaggi: 130
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Potresti cambiare approccio, invece di leggere parole intere leggi carattere per carattere e quando trovi un separatore (spazio o segno di punteggiatura ad esempio) sai che è terminata una parola.
aggiungo che bisognerebbe saper gestire il caso in cui ci siano più di uno spazio tra una parola e l'altra.
Infrid è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
L'Olanda punta su NixOS e open source pe...
OPPO Find X10 Pro Max, il flagship con t...
Gli smartphone Samsung potrebbero avere ...
GeForce Now arriverà sui Googlebo...
Opus 5.5 e GPT-6 Sol nello stesso pomeri...
Weekend Amazon, le prime 5 offerte sono ...
Mini Compressore a 21,84€: gonfia le gom...
Gemini si aggiorna, ora può conne...
Da 32 a 65 pollici: ecco le TV più...
Xiaomi Redmi Note 17 a 269€: ecco perch&...
ASUS avverte i clienti: accesso non auto...
Già record di vendite su Amazon p...
Eni mette un tetto ai prezzi dei carbura...
BYD Seagull (Dolphin Surf), l'elettrica ...
Multa milionaria per un data center del ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v