Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643

    [C] problemi funzioni creat() e fputs()

    Non utilizzo il C da tempo.
    Stavo facendo un programma in cui leggo il contenuto di un file, chiamiamolo file.txt, poi creo un altro file, nuovo_file.txt e metto dentro il contenuto del primo file nel secondo.
    Non capisco perche' mi da' warning nella funzione creat (e' sbagliata ?), dove mi dice:
    [Warning] assignment makes pointer from integer without a cast
    E mi da' errori sulla fputs, quando provo a scrivere nel secondo file la stringa letta nel primo
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    char *strcat(char *str1, const char *str2);
    
    main()
    {
    FILE *fp, *fp1;
    char ch, filename[40], mode[4];
    
    char stringa[80];
    int n;
    int *ip;
    char *str;
    char *nuovo_file;
    
    char nuovo[7] = "nuovo_";
    
    while(1)
    {
    /* Legge il nome del file e il modo */        
    printf("\nInserire il nome del file: ");
    gets(filename);
    
    
    printf("filename = %s\n", filename);
    /* Apertura del file */
    if((fp = fopen(filename, "r")) != NULL)
    {
    
    int i;
    
    nuovo_file = strcat(nuovo, filename);
    fp1 = creat(nuovo_file, "w"); 
    
    while(!feof(fp)){          
    fgets(stringa, 100, fp);
    fputs(stringa, fp1);  
    }
    fclose(fp);
    fclose(fp1);
    puts("Premere x per uscire, un altro tasto per proseguire.");
    if((ch = getc(stdin)) == 'x')
           break;
    else
           continue;
    }
    else
    {
    fprintf(stderr, "\nErrore apertura file %s in modo %s.\n", filename, mode);
    puts("Premere x per uscire, un altro tasto per ritentare.");
    if((ch = getc(stdin)) == 'x')
           break;
    else
           continue;
    }
    }
    
    system("PAUSE");
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643
    Aggiungo che nel caso della fputs qui non ho messo la parte in cui alloco memoria nel file, ogni volta che inserisco la stringa estratta dal primo, quindi non credo sia li'l'errore (errore che non so di che tipo sia)

  3. #3
    creat è una funzione POSIX per la gestione dei file, che restituisce un descrittore file come int (che tu cerchi di assegnare ad un FILE *, da cui l'errore); la fputs, invece, è una funzione della libreria C, che lavora con degli handle di file "opachi" (FILE *).
    Sono due categorie di funzioni completamente separate, non le devi mischiare; personalmente ti consiglio di usare solo le funzioni della libreria C, cercando di usare quelle POSIX solo se ne hai bisogno.
    Per aprire un file con le funzioni della libreria C la funzione corretta da usare è la fopen. Trovi le altre funzioni di stdio.h ad esempio qui.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643
    Perfetto, grazie, in effetti mettendo fopen per creare il file (non mi ricordavo proprio che lo creasse, credevo solo che aprisse un file gia' esistente), funziona anche fputs.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Tra l'altro il ricorso alla creat(), anche quando si voglia/debba effettivamente ricorrere alla gestione dei file con le funzioni POSIX, è "ridondante": la creat() è stata introdotta in passato quanto la funzione open() permetteva solo di aprire file già esistenti senza consentire di crearne di nuovi. Oggi invece, grazie agli opportuni flags, creat(path, mode) è del tutto equivalente a

    codice:
    open(path, O_CREAT| O_WRONLY| O_TRUNC, mode);
    quindi ricorrere a creat() è praticamente inutile.
    every day above ground is a good one

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.