Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-03-2013, 18:13   #1
Marco95
Member
 
Iscritto dal: May 2010
Messaggi: 126
[C/C++]Costruire lista da file

Ciao ragazzi..scrivo perchè ho un problema sul leggere il contenuto di un file e metterlo su una lista concatenata semplice.
Il file di testo è strutturato così:
Codice:
"luca","pippo","marco","etc...",...
...
...
e il programma apparentemente funzionante che ho scritto è questo:

Codice:
#include <iostream>
#include <fstream>
#include <string.h>
#include <malloc.h>
using namespace std;
struct nome {
              char *p;
              nome* succ;
};
typedef nome Tnome;
Tnome* CreaLista();
void Inizializza(char array[],int dim);
void Inserisci(Tnome* &lista,char buffer[]);
void StampaLista(Tnome* lista);
void OrdinaLista(Tnome* &lista);
void Scambia(char* str1[],char* str2[]);

int main()
{
    int prova=0;

    char buffer[100];
    char c;
    int contavirgolette = 0;
    int k=0;
    Tnome *nomipropri;
    ifstream testo;
    testo.open("prova.txt",ios::in);
    nomipropri = CreaLista();
    while(!testo.eof())
    {
        while(contavirgolette<2)
        {
           c = testo.get();
             if (c!='"')
                buffer[k++] = c;
             else contavirgolette++;
        }
        buffer[k]=0;
        k = 0;
           prova++;
           contavirgolette = 0;

            Inserisci(nomipropri,buffer);
            Inizializza(buffer,100);
            c = testo.get();
        

        }
    testo.close();
    StampaLista(nomipropri);



}
Tnome* CreaLista()
{
    return NULL;
}
void Inserisci(Tnome* &lista,char buffer[])
{
    int i;
    Tnome *supporto;

    supporto = (Tnome*) calloc(1,sizeof(Tnome));

    supporto->succ=lista;
    supporto->p = (char*)calloc(strlen(buffer)+1,sizeof(char));

    for(i=0;buffer[i]!='\0';i++)
       supporto->p[i] = buffer[i];
    supporto->p[i] = 0;
    lista=supporto;

}
void Inizializza(char array[],int dim)
{
    int i;
    for(i=0;i<dim;i++)
    array[i]=0;
}
void StampaLista(Tnome* lista)
{

    while(lista!=NULL)
    {
       cout << lista->p << endl;
       lista = lista->succ;


    }
}
Come già detto,il programma funziona,a patto che nel file siano contenuti un numero di nomi limitato...infatti avendo un file contenente circa 5000 nomi,provando a stampare la lista con la funzione stampalista...l'output non è quello che si ci potrebbe aspettare (in particolare l'ultima parola del file non coincide con la prima parola della console..e non riesco proprio a capirne il motivo
Potreste aiutarmi?
Vi allego anche il file .. testo.zip
Grazie.
__________________
Il mio pc:
Scheda madre:MSI Amethyst-m; Processore:amd sempron 3400+;2000Mhz
Ram:ddr-sdram 1024Mb; Scheda grafica:Nvidia geforce 6200SE Turbocache; Scheda audio:AC'97 Audio controller
Sistema Operativo:Windows 7 32bit

Ultima modifica di Marco95 : 10-03-2013 alle 18:25.
Marco95 è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2013, 21:34   #2
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515






Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#include <stdint.h>

typedef struct tagPersona
{
	unsigned char *Nome;
	struct tagPersona *next;
	struct tagPersona *last;	
} Persona;

void Print(Persona *first)
{
	Persona *n = first;

	printf("\n");
	while( n != NULL )
	{
		printf("%s\n", n->Nome);
		n = n->next;
	}
}

void FreeList(Persona *first)
{
	Persona *n1 = first, *n2;
	while ( n1 != NULL )
	{
		n2 = n1->next;
		if ( n1->Nome )
			free(n1->Nome);
		free(n1);
		n1 = n2;
	}
}

Persona* NewNode(Persona *Pers)
{
	Persona *n;
	size_t len;
	
	len = strlen(Pers->Nome);

	n = (Persona *)malloc(sizeof(Persona));
	if( n == NULL )
	{
		printf("\nNewNode 1: Impossibile allocare la memoria. LOL!!!\n");
		return NULL;		
	}		
		
	n->Nome = (unsigned char*)malloc(sizeof(unsigned char) * len + 1);
	if ( !n->Nome )
	{
		printf("\nNewNode 2: Impossibile allocare la memoria. LOL!!!\n");		
		free(n);
		n = NULL;
		return NULL;		
	}	

	strcpy(n->Nome, Pers->Nome);
	n->next = NULL;

	return n;
}

Persona* Append(Persona *Pers, Persona *first)
{
	Persona *n = first, *nuovo;

	if ( first == NULL )
	{
		nuovo = NewNode(Pers);
		if ( !nuovo )
			return first;
		nuovo->last = nuovo;
		return nuovo;		
	}

	nuovo = NewNode(Pers);
	if ( !nuovo )
		return first;
	n = first->last;
	n->next = nuovo;
	first->last = n->next;

	return first;
}

uint64_t MakeBuffer(const char *szFileName, unsigned char **buffer)
{
	long x;
	uint64_t retSizeData = 0;
	long numread;
	FILE *fp;
	
	fp = fopen(szFileName, "rb");
	if ( fp == NULL )
	{
		printf("\nLOL!!!\nErrore nell'apertura del file \"%s\". Addio!\n", szFileName);
		return 0;
	}
	
#if __linux__ || __APPLE__	
	fseeko(fp, 0, SEEK_END);
	retSizeData = ftello(fp);
	fseeko(fp, 0, SEEK_SET);
#else
	_fseeki64(fp, 0, SEEK_END);
	retSizeData = _ftelli64(fp);
	_fseeki64(fp, 0, SEEK_SET);	
#endif

	*buffer = (unsigned char *)malloc(sizeof(unsigned char) * retSizeData);
	if ( !*buffer )
	{
		printf("\nLOL!!!\nMemoria insufficiente. Addio!\n");
		fclose(fp);
		return 0;	
	}
		
	numread = fread(*buffer, 1, retSizeData, fp);
	if ( numread < retSizeData )
	{
		fclose(fp);
		free(*buffer);
		*buffer = NULL;
		printf("\nLOL!!!\nErrore nella lettura del file %s\n", szFileName);
		return 0;
	}
	
	fclose(fp);
	
	return retSizeData;
}

int DFA(unsigned char *buffer, uint64_t SizeData, Persona **pPers)
{
	char c;
	long k;
	long x;	
	Persona Pers;
	
	Pers.Nome = (unsigned char*)malloc(sizeof(unsigned char) * 1024);
	if ( !(Pers.Nome) )
	{
		printf("Impossibile allocare la memoria. LOL!!!\n");
		return 0;		
	}		

	x = 0;
	k = 0;
	while ( k < SizeData )
	{
		c = *(buffer + k++);
		
		while ( c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == ',' )
		{
			c = *(buffer + k++);	
			if ( k >= SizeData )
			{
				free(Pers.Nome);
				return k;
			}
		}
		
		switch( c )
		{
		case '"':
			c = *(buffer + k++);				
			while ( c != '"' )
			{
				if ( k >= SizeData )
				{
					printf("\nErroooooooreeee! File malformato! LOOOOOOOOLLL!!!\n");
					free(Pers.Nome);					
					return 0;			
				}
				Pers.Nome[x++] = c;
				if ( x >= 1024 )
				{
					printf("\nLOOOOOOLLL!!! Ho trovato un nome piu' lungo di 1024 caratteri. LOOOOOOLLL!!! Addio!\n");
					free(Pers.Nome);
					return 0;
				}						
				c = *(buffer + k++);							
			}
			Pers.Nome[x] = '\0';
			x = 0;
			*pPers = Append(&Pers, *pPers);			
			break;
		default:
			break;
		}
	} 

	if ( Pers.Nome )
		free(Pers.Nome);

	return k;
}

int main(int argc, char* argv[])
{
	Persona *pPers = NULL;
	unsigned char *buffer = NULL;
	uint64_t sizeData = 0;
	int ret;

	if ( argc != 2 )
	{
		printf("\nDevi specificare il nome di un file!\n");
		printf("\nUso: %s nomefile\n\n", argv[0]);
		return -1;
	}
	
	sizeData = MakeBuffer(argv[1], &buffer);
	if ( !sizeData )
	{
		printf("\nImpossibile allocare il buffer. Addio!\n");
		return -1;
	}
	
	ret = DFA(buffer, sizeData, &pPers);

	printf("\n");
	
	if ( ret && pPers )
		Print(pPers);
		
	printf("\n");
	
	if ( pPers)
		FreeList(pPers);
	
	if ( buffer )
		free(buffer);

	return 0;
}

Ultima modifica di Vincenzo1968 : 11-03-2013 alle 12:20.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 08:37   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Marco95 Guarda i messaggi
Ciao ragazzi..scrivo perchè ho un problema sul leggere il contenuto di un file e metterlo su una lista concatenata semplice.
Il file di testo è strutturato così:


Come già detto,il programma funziona,a patto che nel file siano contenuti un numero di nomi limitato...infatti avendo un file contenente circa 5000 nomi,provando a stampare la lista con la funzione stampalista...l'output non è quello che si ci potrebbe aspettare (in particolare l'ultima parola del file non coincide con la prima parola della console..e non riesco proprio a capirne il motivo
Potreste aiutarmi?
Vi allego anche il file .. Grazie.
Ho fatto girare la tua applicazione, ma in effetti riesco ad ottenere TUTTI i nomi che ci sono nel file!!
Anzi, di piu': nel file ci sono 5162 nomi ma quando si va a stampare ne vengono stampati 5163. Infatti c'e' anche il nome vuoto dovuto al newline, del quale non hai tenuto conto nella scrittura dell'applicazione.

Perche' il mio output e' diverso dal tuo? Ci possono essere diversi fattori.
In primis, il tuo programma sembra corretto, ma debole. Per debole intendo che un piccolo problema di qualsiasi genere potrebbe farlo sbagliare, spesso rendendo difficile l'identificazione del problema.
E' molto sensibile all'input e all'ambiente di esecuzione.
Per renderlo piu' robusto, e magari trovare il motivo della differenza di esecuzione:
- quando apri un file NON DARE PER SCONTATO che l'operazione riesca, ma controlla che sia effettivamente riuscita;
- anche l'allocazione della memoria potrebbe non riuscire; pertanto controlla che sia riuscita e stampa un messaggio di errore/termina/fa qualcosa nel caso non riesca;
- il ciclo "leggi virgolette" e' molto dipendente dal file esterno. Un errore nel file ti manda in crash. Ovviamente in caso di errore puoi fare ben poco, ma cerca di evitare eventuali crash.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 13:47   #4
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Improved version con automa a stati:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#include <stdint.h>

typedef enum tagStates
{
	S0,
	S1,
	S2,
	S3
} States;

typedef struct tagPersona
{
	unsigned char *Nome;
	struct tagPersona *next;
	struct tagPersona *last;	
} Persona;

void Print(Persona *first)
{
	Persona *n = first;

	printf("\n");
	while( n != NULL )
	{
		printf("%s\n", n->Nome);
		n = n->next;
	}
}

void FreeList(Persona *first)
{
	Persona *n1 = first, *n2;
	while ( n1 != NULL )
	{
		n2 = n1->next;
		if ( n1->Nome )
			free(n1->Nome);
		free(n1);
		n1 = n2;
	}
}

Persona* NewNode(Persona *Pers)
{
	Persona *n;
	size_t len;
	
	len = strlen(Pers->Nome);

	n = (Persona *)malloc(sizeof(Persona));
	if( n == NULL )
	{
		printf("\nNewNode 1: Impossibile allocare la memoria. LOL!!!\n");
		return NULL;		
	}		
		
	n->Nome = (unsigned char*)malloc(sizeof(unsigned char) * len + 1);
	if ( !n->Nome )
	{
		printf("\nNewNode 2: Impossibile allocare la memoria. LOL!!!\n");		
		free(n);
		n = NULL;
		return NULL;		
	}	

	strcpy(n->Nome, Pers->Nome);
	n->next = NULL;

	return n;
}

Persona* Append(Persona *Pers, Persona *first)
{
	Persona *n = first, *nuovo;

	if ( first == NULL )
	{
		nuovo = NewNode(Pers);
		if ( !nuovo )
			return first;
		nuovo->last = nuovo;
		return nuovo;		
	}

	nuovo = NewNode(Pers);
	if ( !nuovo )
		return first;
	n = first->last;
	n->next = nuovo;
	first->last = n->next;

	return first;
}

uint64_t MakeBuffer(const char *szFileName, unsigned char **buffer)
{
	long x;
	uint64_t retSizeData = 0;
	long numread;
	FILE *fp;
	
	fp = fopen(szFileName, "rb");
	if ( fp == NULL )
	{
		printf("\nLOL!!!\nErrore nell'apertura del file \"%s\". Addio!\n", szFileName);
		return 0;
	}
	
#if __linux__ || __APPLE__	
	fseeko(fp, 0, SEEK_END);
	retSizeData = ftello(fp);
	fseeko(fp, 0, SEEK_SET);
#else
	_fseeki64(fp, 0, SEEK_END);
	retSizeData = _ftelli64(fp);
	_fseeki64(fp, 0, SEEK_SET);	
#endif

	*buffer = (unsigned char *)malloc(sizeof(unsigned char) * retSizeData);
	if ( !*buffer )
	{
		printf("\nLOL!!!\nMemoria insufficiente. Addio!\n");
		fclose(fp);
		return 0;	
	}
		
	numread = fread(*buffer, 1, retSizeData, fp);
	if ( numread < retSizeData )
	{
		fclose(fp);
		free(*buffer);
		*buffer = NULL;
		printf("\nLOL!!!\nErrore nella lettura del file %s\n", szFileName);
		return 0;
	}
	
	fclose(fp);
	
	return retSizeData;
}

int DFA(unsigned char *buffer, uint64_t SizeData, Persona **pPers)
{
	States state = S0;	
	char c;
	long k;
	long x;	
	Persona Pers;
	
	Pers.Nome = (unsigned char*)malloc(sizeof(unsigned char) * 1024);
	if ( !(Pers.Nome) )
	{
		printf("Impossibile allocare la memoria. LOL!!!\n");
		return 0;		
	}		

	x = 0;
	k = 0;
	while ( k < SizeData )
	{
		c = *(buffer + k++);
		
		while ( c == ' ' || c == '\t' || c == '\n' || c == '\r' )
		{
			c = *(buffer + k++);	
			if ( k >= SizeData )
			{
				free(Pers.Nome);
				return k;
			}
		}
		
		switch( state )
		{
			case S0:
				x = 0;
				if ( c == '"' )
				{
					state = S1;
				}
				else
				{
					printf("\nS0 Errore: %c input malformato. Addio!\n", c);
					free(Pers.Nome);
					return 0;
				}
				break;
			case S1:
				if ( (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= 128 && c <= 154) || (c >= 224 && c <= 237) )
				{
					Pers.Nome[x++] = c;	
					if ( x >= 1024 )
					{
						printf("\nS1 LOOOOOOLLL!!! Ho trovato un nome piu' lungo di 1024 caratteri. LOOOOOOLLL!!! Addio!\n");
						free(Pers.Nome);
						return 0;
					}																		
				}
				else
				{
					k--;
					state = S2;
				}
				break;
			case S2:
				if ( c == '"' )
				{
					Pers.Nome[x] = '\0';
					x = 0;
					*pPers = Append(&Pers, *pPers);
					state = S3;
				}
				else
				{
					printf("\nS2 Errore: %c input malformato. Addio!\n", c);
					free(Pers.Nome);
					return 0;										
				}
				break;
			case S3:
				if ( c == ',' )
				{
					state = S0;
				}
				else
				{
					printf("\nS3 Errore: %c input malformato. Addio!\n", c);
					free(Pers.Nome);
					return 0;															
				}
				break;
			default:
				printf("\nLOL! Errore: %c input malformato. Addio!\n", c);
				free(Pers.Nome);
				return 0;
		}		
	} 

	if ( Pers.Nome )
		free(Pers.Nome);

	return k;
}

int main(int argc, char* argv[])
{
	Persona *pPers = NULL;
	unsigned char *buffer = NULL;
	uint64_t sizeData = 0;
	int ret;

	if ( argc != 2 )
	{
		printf("\nDevi specificare il nome di un file!\n");
		printf("\nUso: %s nomefile\n\n", argv[0]);
		return -1;
	}
	
	sizeData = MakeBuffer(argv[1], &buffer);
	if ( !sizeData )
	{
		printf("\nImpossibile allocare il buffer. Addio!\n");
		return -1;
	}
	
	ret = DFA(buffer, sizeData, &pPers);

	printf("\n");
	
	if ( ret && pPers )
		Print(pPers);
		
	printf("\n");
	
	if ( pPers)
		FreeList(pPers);
	
	if ( buffer )
		free(buffer);

	return 0;
}





Ultima modifica di Vincenzo1968 : 11-03-2013 alle 14:03.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 14:16   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Improved version con automa a stati:

<cut>
toglimi una curiosita': perche' scrivi sempre

Codice:
     c = *(buffer + k++);
?

Non e' piu' bello, a vedersi:
Codice:
     c = buffer[k++];
? Sembra anche piu' leggibile....
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 14:19   #6
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Perché è più lolloso

No scherzo, è che sono rimasto al Dragon Book che, nell'esempio del dfa, usa quella notazione. Ma hai ragione, con le quadre è più chiaro, più leggibile.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 14:22   #7
Marco95
Member
 
Iscritto dal: May 2010
Messaggi: 126
Quote:
Ho fatto girare la tua applicazione, ma in effetti riesco ad ottenere TUTTI i nomi che ci sono nel file!!
Anzi, di piu': nel file ci sono 5162 nomi ma quando si va a stampare ne vengono stampati 5163. Infatti c'e' anche il nome vuoto dovuto al newline, del quale non hai tenuto conto nella scrittura dell'applicazione.

Perche' il mio output e' diverso dal tuo? Ci possono essere diversi fattori.
In primis, il tuo programma sembra corretto, ma debole. Per debole intendo che un piccolo problema di qualsiasi genere potrebbe farlo sbagliare, spesso rendendo difficile l'identificazione del problema.
E' molto sensibile all'input e all'ambiente di esecuzione.
Per renderlo piu' robusto, e magari trovare il motivo della differenza di esecuzione:
- quando apri un file NON DARE PER SCONTATO che l'operazione riesca, ma controlla che sia effettivamente riuscita;
- anche l'allocazione della memoria potrebbe non riuscire; pertanto controlla che sia riuscita e stampa un messaggio di errore/termina/fa qualcosa nel caso non riesca;
- il ciclo "leggi virgolette" e' molto dipendente dal file esterno. Un errore nel file ti manda in crash. Ovviamente in caso di errore puoi fare ben poco, ma cerca di evitare eventuali crash.
Tralasciando per un momento quei controlli da te citati ho provato a stampare il numero corrispondente al nome...ed effettivamente mi arriva a 5162...il problema è che anzichè partire da 0 mi parte da 4868 e non riesco a capirne il motivo..è come se la schermata nera avesse un tot massimo di linee visualizzabili :/ (comunque a run-time si vedono i valori che partono da 1..ma poi spariscono)

Quote:
Improved version con automa a stati:
Ho provato a far girare il tuo programma ma mi restituisce un messaggio d'errore sull'allocazione della memoria..

P.s.Ho cancellato le linee
Codice:
#if __linux__ || __APPLE__	
	fseeko(fp, 0, SEEK_END);
	retSizeData = ftello(fp);
	fseeko(fp, 0, SEEK_SET);
#else
	_fseeki64(fp, 0, SEEK_END);
	retSizeData = _ftelli64(fp);
	_fseeki64(fp, 0, SEEK_SET);	
#endif
perchè mi dava errore ed ho scambiato gli unsigned char in char...perchè mi diceva invalid type of conversion
__________________
Il mio pc:
Scheda madre:MSI Amethyst-m; Processore:amd sempron 3400+;2000Mhz
Ram:ddr-sdram 1024Mb; Scheda grafica:Nvidia geforce 6200SE Turbocache; Scheda audio:AC'97 Audio controller
Sistema Operativo:Windows 7 32bit

Ultima modifica di Marco95 : 11-03-2013 alle 14:32.
Marco95 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 14:36   #8
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Codice:
valgrind --leak-check=full --show-reachable=yes --track-origins=yes
--log-file=outValgrind.txt ./listadbg listafileinput.txt
==21205== Memcheck, a memory error detector
==21205== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==21205== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==21205== Command: ./listadbg listafileinput.txt
==21205== Parent PID: 21066
==21205==
==21205==
==21205== HEAP SUMMARY:
==21205== in use at exit: 0 bytes in 0 blocks
==21205== total heap usage: 10,329 allocs, 10,329 frees, 208,078 bytes allocated
==21205==
==21205== All heap blocks were freed -- no leaks are possible
==21205==
==21205== For counts of detected and suppressed errors, rerun with: -v
==21205== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 14:42   #9
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Marco95 Guarda i messaggi
Tralasciando per un momento quei controlli da te citati ho provato a stampare il numero corrispondente al nome...ed effettivamente mi arriva a 5162...il problema è che anzichè partire da 0 mi parte da 4868 e non riesco a capirne il motivo..è come se la schermata nera avesse un tot massimo di linee visualizzabili :/ (comunque a run-time si vedono i valori che partono da 1..ma poi spariscono)


Ho provato a far girare il tuo programma ma mi restituisce un messaggio d'errore sull'allocazione della memoria..

P.s.Ho cancellato le linee
Codice:
#if __linux__ || __APPLE__	
	fseeko(fp, 0, SEEK_END);
	retSizeData = ftello(fp);
	fseeko(fp, 0, SEEK_SET);
#else
	_fseeki64(fp, 0, SEEK_END);
	retSizeData = _ftelli64(fp);
	_fseeki64(fp, 0, SEEK_SET);	
#endif
perchè mi dava errore ed ho scambiato gli unsigned char in char...perchè mi diceva invalid type of conversion
Strano, a me funziona:





Che compilatore usi? Io l'ho compilato con GCC 4.7.2 su Linux e Visual Studio 2012 su Windows.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 14:47   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Marco95 Guarda i messaggi
Tralasciando per un momento quei controlli da te citati ho provato a stampare il numero corrispondente al nome...ed effettivamente mi arriva a 5162...il problema è che anzichè partire da 0 mi parte da 4868 e non riesco a capirne il motivo..è come se la schermata nera avesse un tot massimo di linee visualizzabili :/ (comunque a run-time si vedono i valori che partono da 1..ma poi spariscono)
Si, ha un numero massimo di linee visualizzabili!! Scusa, pensavo fosse chiaro.
Per cambiarlo sotto Windows, clicca col bottone destro sul titolo, poi scegli Properties e seleziona il "Layout" tab.
A quel punto puoi selezionare la dimensione che ti serve
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 14:56   #11
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Codice:
void Print(Persona *first)
{
	uint32_t count = 1;
	
	Persona *n = first;

	printf("\n");
	while( n != NULL )
	{
		printf("%5d -> %s\n", count++, n->Nome);
		n = n->next;
	}
}
Codice:
./listafile2 listafileinput.txt > out.txt

Ultima modifica di Vincenzo1968 : 11-03-2013 alle 15:03.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 15:01   #12
Marco95
Member
 
Iscritto dal: May 2010
Messaggi: 126
Copiando esattamente il tuo codice ottengo i seguenti errori:
-invalid conversion from unsigned char* to const char*
in function uint64...
_fseeki64 was no delclaered in this scope
_ftelli64 was not declared in this scope

Io utilizzo codeblocks su windows versione 10.05...

Poi potrsti spiegarmi che cosa sono _fseeki64 e _ftelli64?
Quote:
Si, ha un numero massimo di linee visualizzabili!! Scusa, pensavo fosse chiaro.
Per cambiarlo sotto Windows, clicca col bottone destro sul titolo, poi scegli Properties e seleziona il "Layout" tab.
A quel punto puoi selezionare la dimensione che ti serve
Ok provo..
EDIT:Il problema sembrava risiedere proprio là...che INGENUITà
__________________
Il mio pc:
Scheda madre:MSI Amethyst-m; Processore:amd sempron 3400+;2000Mhz
Ram:ddr-sdram 1024Mb; Scheda grafica:Nvidia geforce 6200SE Turbocache; Scheda audio:AC'97 Audio controller
Sistema Operativo:Windows 7 32bit

Ultima modifica di Marco95 : 11-03-2013 alle 15:08.
Marco95 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 15:06   #13
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Marco95 Guarda i messaggi
Copiando esattamente il tuo codice ottengo i seguenti errori:
-invalid conversion from unsigned char* to const char*
in function uint64...
_fseeki64 was no delclaered in this scope
_ftelli64 was not declared in this scope

Io utilizzo codeblocks su windows versione 10.05...

Poi potrsti spiegarmi che cosa sono _fseeki64 e _ftelli64?
http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx

http://msdn.microsoft.com/en-US/libr...=vs.80%29.aspx

Eppure è C standard. Non è che con CodeBlocks usi qualche compilatore stravagante tipo DEV-C++?

Non è meglio usare Geany con GCC per Windows?

http://www.geany.org/Support/RunningOnWindows

http://code.google.com/p/mingw-builds/

Ultima modifica di Vincenzo1968 : 11-03-2013 alle 15:14.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 15:11   #14
Marco95
Member
 
Iscritto dal: May 2010
Messaggi: 126
Come compilatore uso Mingw...non so se può essere considerato stravagante :/
Quote:
Non è meglio usare Geany con GCC per Windows?

http://www.geany.org/Support/RunningOnWindows

http://code.google.com/p/mingw-builds/
Non lo so,mi sono sempre trovato bene con codeblocks...comunque proverò a seguire il tuo consiglio
__________________
Il mio pc:
Scheda madre:MSI Amethyst-m; Processore:amd sempron 3400+;2000Mhz
Ram:ddr-sdram 1024Mb; Scheda grafica:Nvidia geforce 6200SE Turbocache; Scheda audio:AC'97 Audio controller
Sistema Operativo:Windows 7 32bit

Ultima modifica di Marco95 : 11-03-2013 alle 15:13.
Marco95 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 15:20   #15
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Al limite c'è anche la versione gratuita di Visual Studio 2012:

http://www.microsoft.com/visualstudi...press-products

http://www.microsoft.com/visualstudi...indows-desktop

http://www.microsoft.com/visualstudi...indows-desktop

Ultima modifica di Vincenzo1968 : 11-03-2013 alle 15:23.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 15:36   #16
Marco95
Member
 
Iscritto dal: May 2010
Messaggi: 126
Quote:
Al limite c'è anche la versione gratuita di Visual Studio 2012:
Ok grazie
__________________
Il mio pc:
Scheda madre:MSI Amethyst-m; Processore:amd sempron 3400+;2000Mhz
Ram:ddr-sdram 1024Mb; Scheda grafica:Nvidia geforce 6200SE Turbocache; Scheda audio:AC'97 Audio controller
Sistema Operativo:Windows 7 32bit
Marco95 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 15:46   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515




Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2013, 23:39   #18
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
Jeff Bezos torna al comando, stavolta di...
Anthesi sceglie OVHcloud per digitalizza...
Cube presenta Trike Flatbed Hybrid 750, ...
Call of Duty Black Ops 7 peggio di Infin...
L'Italia è il secondo mercato per...
Wi-Fi superveloce anche in giardino? FRI...
La Ford Focus va ufficialmente in pensio...
Booking.com integra Revolut Pay: nasce i...
DGX Spark a 175 fps con ray tracing su C...
Red Dead Redemption 2 Enhanced è ...
3Dfx Voodoo 2, una GPU nata con la scade...
Apple Watch: la Mela dovrà versar...
TIM e Nokia insieme per potenziare il 5G...
Musk lancia la nuova era dei DM su X con...
A Dallas Fort Worth entrano in azione se...
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: 17:32.


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