Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [ANSI C] Problema con lettura file

    Salve ragazzi ho un piccolo problema non riesco a leggere il contenuto di un file..
    mi spiego meglio utilizzo i lseguente codice:

    [code]
    LISTAFILE *CreaLista(char * nomeFile, LISTAFILE *pListaFile)
    {
    LISTAFILE *pAux=NULL;
    char * buffer=NULL;

    FILE *fp;

    fp=fopen(nomeFile,"r");
    if (fp!=NULL)
    {
    while (feof(fp)==0)
    {
    fscanf(fp,"%s",&buffer);

    if (pListaFile==NULL)
    {
    pListaFile=(LISTAFILE*)malloc(sizeof (LISTAFILE));
    pListaFile->nomeColore= (char *) malloc(&strlen(buffer));
    strcpy(pListaFile->nomeColore,&buffer);
    pListaFile->pNext=NULL;
    }
    else
    {
    LISTAFILE *pUltimo;
    pAux=(LISTAFILE * ) malloc (sizeof (LISTAFILE));
    pAux->nomeColore=(char *) malloc(strlen(&buffer));
    strcpy(pAux->nomeColore,&buffer);
    pUltimo=CercaFine(pListaFile);
    pAux->pNext=NULL;
    pUltimo->pNext=pAux;
    }
    }
    fclose(fp);
    }
    return pListaFile;
    }
    [\code]

    e fin qui nessun problema, il problema si verifica con i warning che mi vengono restituiti:

    Compiling...
    prova.c
    D:\prova.c(558) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
    D:\prova.c(558) : warning C4024: 'strlen' : different types for formal and actual parameter 1
    D:\prova.c(559) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
    D:\prova.c(559) : warning C4024: 'strcpy' : different types for formal and actual parameter 2
    D:\prova.c(572) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
    D:\prova.c(572) : warning C4024: 'strlen' : different types for formal and actual parameter 1
    D:\prova.c(573) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
    D:\prova.c(573) : warning C4024: 'strcpy' : different types for formal and actual parameter 2

    prova.obj - 0 error(s), 8 warning(s)

    la struttura di LISTAFILE è :

    typedef
    struct listaFile
    {
    char * nomeColore;
    struct listaFile *pNext;
    }LISTAFILE;

    Qualcuno può aiutarmi???

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    buffer e' un puntatore a char ...

    Lo usi nella fsacnf senza allocare lo spazio e per giunta passi il puntatore al puntatore ...

    Tratti in modo simile buffer anche in seguito ... ad esempio nella strcpy passi il puntatore al puntatore, ovviamente sbagliando ...

  3. #3
    ed allora secondo te una possibile soluzione quale potrebbe essere?? espressa in codice???
    non riesco a trovarla, ci sto sbattendo la testa da due giorni..
    scusami se chiedo tanto..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    No ... scrivere tutto il codice no ...

    Ma ti suggerisco di dichiarare il buffer cosi'

    char buffer[200];

    in modo che sia allocato lo spazio ...

    Ovviamente questa riga dovra' essere scritta cosi'

    fscanf(fp,"%s", buffer);

    e poi dovrai fare le altre correzioni ...

  5. #5
    e qui sta il problema... avevo già usato questa soluzione

    [code]
    LISTAFILE *CreaLista(char * nomeFile, LISTAFILE *pListaFile)
    {
    LISTAFILE *pAux=NULL;
    char buffer[100];

    FILE *fp;

    fp=fopen(nomeFile,"r");
    if (fp!=NULL)
    {
    while (feof(fp)==0)
    {


    fscanf(fp,"%s",buffer);


    if (pListaFile==NULL)
    {

    pListaFile=(LISTAFILE*)malloc(sizeof (LISTAFILE));
    pListaFile->nomeColore= (char *) malloc(strlen(buffer));
    strcpy(pListaFile->nomeColore,buffer);
    pListaFile->pNext=NULL;

    }
    else
    {
    LISTAFILE *pUltimo;


    pAux=(LISTAFILE * ) malloc (sizeof (LISTAFILE));
    pAux->nomeColore=(char *) malloc(strlen(buffer));
    strcpy(pAux->nomeColore,buffer);
    pUltimo=CercaFine(pListaFile);
    pAux->pNext=NULL;
    pUltimo->pNext=pAux;

    }

    }
    fclose(fp);
    }

    return pListaFile;

    }
    [\code]
    solo che essendo un progetto di studio... non gradiscono limitazioni...
    non vogliono un array definito...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ma quello e' un buffer di input in cui viene inserita una linea ... non stiamo parlando della struttura in cui allocherai la memoria occupata da ogni elemento, di volta in volta.

    Non ha senso rendere dinamico anche il buffer di input ... anche se lo dichiari da 1K, non avrai linee con nomi di file cosi' lunghi (compreso il percorso).

  7. #7
    quindi credi che non mi faccia nessun problema il prof quando mi correggerà il progetto???

    effettivamente non credo esistano colori il cui nome abbia più di 100 caratteri... compreso lo \0..
    almeno spero...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Colori ? Ma non era una lista di nomi di file ?

  9. #9
    Originariamente inviato da oregon
    Colori ? Ma non era una lista di nomi di file ?
    No va a leggere da un file il contenuto, tale contenuto è rappresentato da colori...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Beh ... allora che problemi puoi avere ... usa un buffer da 200 caratteri per l'input da file, mentre gli elementi della lista li allochi e usi il puntatore ...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.