Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    30

    [C] problemi di conversione dati

    ciao a tutti,
    ho un piccolo problema, che sicuramente sarà dovuto ad un erroneo assegnamento, ma non riesco a capire dove sbaglio...

    vi riassumo in breve i vari passaggi:
    codice:
    struct mia{
    char primo[2];
    .........
    .........
    }
    .......
    .......
    char *pch;
    pch = strtok (bufferIn, "|");
    	 	
    if (pch != NULL) 	
    { 	    
    strcpy(mia.primo, pch); 	    
    strcat(mia.primo, "\n"); 
    printf("primo: %s\n", mia.primo); 
    }
    .....
    .....
    if (strcmp(mia.primo, "F") != 0)
    {
    strcpy(risposta, "OK|");
    printf("%s\n", mia.primo);
    strcat(risposta, mia.primo);
    }
    ......
    ......
    la prima printf mi stampa il valore corretto, mentre la seconda mi stampa cose strane:
    se metto %s mi stampa tre linee orizzontali, se metto %c mi stampa Y e invece dovrebbe essere F, mentre se metto %d stampa un numero negativo.

    Non so più cosa provare......

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    innanzi tutto...potevi postare tutto il codice...così ognuno può dare un'occhiata meglio...magari anche a delle parti che tu dai per scontato che siano corrette!!
    comunque quello che non capisco io per esempio è questo:
    codice:
    if (strcmp(mia.primo, "F") != 0)
    {
    strcpy(risposta, "OK|");
    printf("%s\n", mia.primo);
    strcat(risposta, mia.primo);
    }
    ma in questo caso...la variabile mia, cos'è?? io qua la vedo solo come il nome della struct che hai creato lì sopra...ma non come variabile di tipo struct!!! spiegati meglio se puoi!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    30
    l'applicazione deve semplicemente fare il tokenizer del buffer passato al main e salvare i valori nella struttura mia che è dichiarata nell'include Gestore.h così come l'avevo scritta ieri. io non faccio altro che fare le stesse cose per ogni elemento della struttura, per questo avevo postato solo una porzione di codice.....

    codice:
    #include <stdio.h> 
    #include <string.h> 
    #include "../INC/Gestore.h"
    
    void tokenizer(char * bufferIn, struct mia mia)
    {
    	char *pch;
    	
    	pch = strtok (bufferIn, "|");
    	if (pch != NULL)
    	{
    	   strcpy(mia.primo, pch); 	    
               strcat(mia.primo, "\n"); 
               printf("primo: %s\n", mia.primo); 	    
    	}
    ........
    ........
    }
    
    int gestore_licenze (char *bufferIn, char *bufferOut)
    {
     	struct mia mia;
    	char risposta[15];
    	
            tokenizer(bufferIn,mia);
    
    	if (strcmp(mia.primo, "F") != 0)
    	{
    	    	strcpy(risposta, "OK|");
                    printf("%s\n", mia.primo);
                    strcat(risposta, mia.primo);		
    	}
    
    ............
    ............
    }
    
    int main (int argc, char *argv[])
    {
    		
    	char *bufferIn;
    	char *bufferOut;
    	int ret;
    	
    	bufferIn = "F|V|F|1|0|0|0";
    	
    	printf("Avviato main\n");
    	printf("buffer da spacchettare: %s\n", bufferIn);	
    	ret = gestore(bufferIn, bufferOut);
    	printf("Terminato main\n");
    	return 0;
    }
    grazie

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    bhà ho dato un'occhiata al codice...anche se non ho ben capito cosa t serve e cosa dovrebbe stampare quella seconda printf() ho interpretato un pò e ho cercato solo di farla stampare! dimmi se è quello che cercavi o se ho fatto tutt'altro!!
    posto il codice qua:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct mia {
           char primo[15];
    };
    
    void tokenizer(char * bufferIn, struct mia *mia);
    int gestore_licenze (char *bufferIn, char *bufferOut);
    
    int main ()
    {	
    	char bufferIn[]="F|V|F|1|0|0|0";
    	char *bufferOut;
    	int ret;
    	
    	printf("Avviato main\n");
    	printf("buffer da spacchettare: %s\n", bufferIn);	
    	ret = gestore_licenze(bufferIn, bufferOut);
    	printf("Terminato main\n");
    	system ("pause");
    	return 0;
    }
    
    void tokenizer(char* bufferIn, struct mia *mia)
    {
    	char *pch;
    	
    	pch = strtok (bufferIn, "|");
    	
    	if (pch != NULL)
    	{
    	   strcpy((*mia).primo, pch); 	    
               strcat((*mia).primo, "\n"); 
               printf("primo: %s\n", (*mia).primo); 	    
    	}
    }
    
    int gestore_licenze (char *bufferIn, char *bufferOut)
    {
     	struct mia mia;
    	char risposta[15];
    	
        tokenizer(bufferIn,&mia);
    
    	if (strcmp(mia.primo, "F") != 0)
    	{
    	    	strcpy(risposta, "OK|");
                    printf("%s\n", mia.primo);
                    strcat(risposta, mia.primo);		
    	}
    }
    ciao ciao
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    30
    grazie....

    a stampare stampa il valore corretto....ma non funziona bene il strcmp, infatti nell'if dovrebbe entrare solo se il valore è diverso da F e invece ci entra anche con valore F.


    ora ci gioco un po' e cerco di capire qual'è il problema

    grazie di tutto....

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.