Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++]Problema lettura

  1. #1

    [C++]Problema lettura

    Ho il seguente file:
    GeforceFx5200
    250
    400
    128
    128
    Da qui cerco di ricavare le info cosi:
    codice:
    #include <cstdio>
    #include <cstdlib>
    #include <string>
    
    using namespace std;
    
    struct Info
    {
        char * nm;
        int gpu_c;
        int mem_c;
        int bus_c;
        int mem_t;
    };
    
    int main(int argc, char * argv[])
    { 
       Info sk_video; 
       memset(&sk_video, 0, sizeof(Info));
       FILE * f = fopen("fx5200.txt", "r"); 
       fread(&sk_video, sizeof(Info), 1, f);
       // fscanf(f, "%s %d %d %d %d", &sk_video);
       char sc;
       printf
       (
       "Model Name => %s, \n \
       Gpu Clock => %i \n \
       Memory Clock => %i \n \
       Bus type => %i \n \
       Memory Installed => %i \n", 
       &sk_video.nm, 
       &sk_video.gpu_c, 
       &sk_video.mem_c, 
       &sk_video.bus_c, 
       &sk_video.mem_t
       ); 
       scanf("%s", &sc);
       fclose(f);
       return 0;
    }
    Ma il risultato è questo..................why????









    Tnk && HELP
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    non hai allocato la memoria alla stringa iniziale, ocis i primi 4 byte vengono messi nell'indirizzo della stringa, e gli altri messi al posto dei valori, a dire la verrità nn capisco perchè nn ti dia erore di acesso a memoria non allocata o protetta,se ti capitava lo avresti capito + facilmente.e inoltre dovresti differenziare la lettura della stringa dai dati binari,perchè non puoi sapere quanto è lunga la stringa, se vuoi propio risparimiare memoria usa un vettore di char come buffer per la stringa e poi alloca la dimensione corretta, o metti direttamente il vettore di char nella struttura, ma ricordati che devi comunque separare le diverse letture dei dati

  3. #3
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct _Info
    {
        char nm[50]; /* the board name */
        int gpu_c; /* the GPU clock */
        int mem_c; /* the me clock */
        int bus_c; /* the bus */
        int mem_t; /* the installed memory */
    }Info;
    
    int main(int argc, char * argv[])
    { 
       char sk[50] ;
       strcpy(sk, argv[1]);
       Info sk_video; 
       memset(&sk_video, 0, sizeof(Info));
       FILE * f = fopen(sk, "r"); 
       fscanf
       (f, 
       "%s %d %d %d %d",
       &sk_video.nm,
       &sk_video.gpu_c, 
       &sk_video.mem_c,
       &sk_video.bus_c,
       &sk_video.mem_t
       );
       fclose(f);
       printf("\t\\\\\\\\\\\\\\\\\\\\\\\\\ %s \\\\\\\\\\\\\\\\\\\\\\\\\ \n", sk_video.nm );
       printf
       (
       "Card Name => %s \n \
       Gpu Clock => %d MHz \n \
       Memory Clock => %d MHz \n \
       Bus type => %d bit \n \
       Memory on board => %d Mb \n", 
       sk_video.nm, 
       sk_video.gpu_c, 
       sk_video.mem_c, 
       sk_video.bus_c, 
       sk_video.mem_t
       ); 
       printf("\t\\\\\\\\\\\\\\\\\\\\\\\\\ %s \\\\\\\\\\\\\\\\\\\\\\\\\ \n", sk_video.nm );
       memset(&sk_video, 0, sizeof(Info));
       char sc;
       puts("Enter any key to exit\n");
       scanf("%s", &sc);
       return 0;
    }
    Risolto!
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

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.