Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214

    [C] warning: assignment makes integer from pointer without a cast

    Ciao a tutti, ho un problema con un cast. La situazione è la seguente:

    passo ad una funzione un char **stringa.
    Ne faccio una copia:

    char *cpy = strdup(*stringa);

    la tokenizzo nel seguente modo:
    codice:
    char *ptr1 = strtok(cpy, ","); 
    char *ptr2 = strtok(NULL, ";");
    Dopo di che uso una mia funzione che elimina spazi bianchi all'inizio o alla fine della stringa, la sua firma è la seguente:

    char *trim(char *string);

    devo "trimmare" ptr1 e ptr2, dunque faccio:
    codice:
    *ptr1 = (char*) trim(ptr1); 
    *ptr2 = (char*) trim(ptr2);
    Qui c'è il warning contenuto nel titolo...Cosa c'è di sbagliato nel casting?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ho subito un dubbio riguardo al tuo:
    passo ad una funzione un char **stringa.
    Non mi pare che sia un array di stringhe, quindi perché non usi semplicemente "char *stringa"?

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214
    Hai ragione, mi sono lasciato "prendere dalla foga". E' una funzione di comodo, alla quale passo (in questo momento) ciclicamente un elemento di un array di stringhe in questo modo: &arraystring[i] (chiaramente arraystring è un char **). Ma va da se che arraystring[i] è un char*, dunque devo modificare la funzione... Che testa che ho!

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214
    Ok, ho modificato la funzione, ma resta comuqnue il warning. La situazione aggiornata è la seguente:

    la funzione prende in ingresso un char *stringa.

    ne faccio una copia:
    char *cpy = strdup(stringa);

    tokenizzo:
    char *ptr1 = strtok(cpy, ",");
    char *ptr2 = strtok(NULL, ";");

    trim:
    char *ptr1 = (char*) trim(ptr1);
    char *ptr2 = (char*) trim(ptr2);

    ptr1 e ptr2 sono due char*, e trim restituisce un char*...

  5. #5
    Togli quei char* iniziali nelle seconde due righe, ché non li stai inizializzando...

    codice:
    ptr1 = (char*)trim(ptr);
    Ci sarebbe anche utile sapere il contenuto della funzione trim.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Come ha detto anche l'altro utente ci sono diversi problemi:
    1) char *ptr1 = (char*) trim(ptr1); => non puoi chiamare ptr1 la variabile di ritorno avresti un altro tipo di errore (tipo "la variabile è già stata definita")
    2) se come dici trim ritorna un "char *" allora è inutile il cast:
    ptr1_trimmed = trim(ptr1);
    3) una riga come quella al punto 2 non può darti l'errore in oggetto
    4) ricordati che se ptr1 poi non lo usi più dovrai fare una "free" (immaginando che trim allochi una nuova stringa, questo l'ho supposto)

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214
    Char *ptr1 = trim è un errore di copincolla..scrivo dal telefono e non è molto agevole..tra poco modifico il codicee ricontrollo gli insegnamenti

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.