Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di ivny
    Registrato dal
    Sep 2009
    Messaggi
    24
    Grazie mille^^
    Nel frattempo è sorto un piccolo problema:
    una parte del codice del mio programma è così:

    char *s1;
    char *in_line;
    fgets(in_line,500,stdin);
    s1 = strtok(in_line, " ");

    in fase di compilazione non mi dà errori, ma solo un warning nelle linea di strtok ([warning]:assignment types makes pointer to integer) che poi, a programma lanciato, non mi spezza la stringa.
    Ho controllato più volte sui miei manuali ma non mi pare ci siano errori sintattici o di assegnamento tra tipi di variabili.
    Qualcuno può aiutarmi?



    edit by MItaly: post originariamente in questa discussione

  2. #2
    1. A meno che in_line non sia inizializzato in qualche maniera altrove, stai leggendo una stringa da tastiera dentro ad un puntatore non inizializzato, il che significa che stai scrivendo in una locazione "casuale" di memoria; il fatto che il programma non vada in crash è pura fortuna. Dovresti fare:
    codice:
    char in_line[500];
    fgets(in_line,sizeof(in_line),stdin);
    2. strtok come secondo parametro riceve il carattere (char) delimitatore, mentre tu gli stai passando una stringa (const char *); il warning in questione ti sta dicendo che, tramite conversione implicita, " " (=puntatore a char) decade in intero (=la locazione di memoria in questione), dato che char (il tipo destinazione) è di tipo integrale. La soluzione è passare non una stringa, ma un char come strtok si aspetta:
    codice:
    s1 = strtok(in_line, ' ');
    Nota gli apici singoli: ' ' è il singolo char relativo allo spazio, " " è una stringa (=array di char terminato da carattere '\0') contente uno spazio seguito dal carattere terminatore.

    Nota comunque che entrambi questi errori sono abbastanza madornali , ti consiglio vivamente di rileggerti il capitolo sulle stringhe del tuo libro di C o C++.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di ivny
    Registrato dal
    Sep 2009
    Messaggi
    24
    Grazie mille, ora funziona tutto^^
    Riguardo l'uso di puntatori a char e stringhe, il mio manuale ha esempi in cui le usa allo stesso modo (e da cui ho copiato per sicurezza), quindi mi sa che l'unico problema è stata quella disattenzione sugli apici che ho messo allo spazio

  4. #4
    Originariamente inviato da ivny
    Grazie mille, ora funziona tutto^^
    Riguardo l'uso di puntatori a char e stringhe, il mio manuale ha esempi in cui le usa allo stesso modo (e da cui ho copiato per sicurezza), quindi mi sa che l'unico problema è stata quella disattenzione sugli apici che ho messo allo spazio
    No, guarda che se il tuo codice è come l'hai postato è proprio sbagliato, dato che stai usando un puntatore non inizializzato come destinazione per la stringa letta da tastiera; probabilmente il tuo manuale ci mette da qualche parte una malloc o usa un buffer statico di qualche genere.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.