Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] Strtok non funziona

    Ragazzi vorrei capire perchè non funziona questo programma:

    codice:
    #include <stdio.h> #include <string.h>  static const char *g_separators = " ";  int main() { 	char *str = "1 2 3 4 5 6 7 8 9 10"; 	char *ptr;  	ptr = strtok(str, g_separators);  	while (ptr) { 		printf(" => %s\n", ptr); 		ptr = strtok(NULL, g_separators); 	}  	return 0; }
    mentre se cambio la dichiarazione di char *str con char str[] funziona...qualcuno mi saprebbe spiegare il motivo?
    Non ho firme, ma la ferma speranza che compaia una firma automatica ogni qualvolta ci sia bisogno di una firma, fermo restando che la speranza di una firma è l' ultima a morire

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Codice illeggibile.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    codice:
    #include <stdio.h>
    #include <string.h>
    
      static const char *g_separators = " ";
    
      int main() {
     	char *str = "1 2 3 4 5 6 7 8 9 10";
     	char *ptr;
    
      	ptr = strtok(str, g_separators);
    
      	while (ptr) {
     		printf(" => %s\n", ptr);
     		ptr = strtok(NULL, g_separators);
     	}
    
      	return 0;
     }
    Non ho firme, ma la ferma speranza che compaia una firma automatica ogni qualvolta ci sia bisogno di una firma, fermo restando che la speranza di una firma è l' ultima a morire

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    strtok modifica la stringa passata come parametro.
    Tu gli stai passando una stringa costante, che non può essere modificata.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    No, purtroppo non è questo il motivo, perchè la stringa che deve modificare è str (che non è costante), non g_separators.
    Purtroppo non capisco perchè se dichiaro str[] funziona, ed invece se lascio *str non funziona.
    Non ho firme, ma la ferma speranza che compaia una firma automatica ogni qualvolta ci sia bisogno di una firma, fermo restando che la speranza di una firma è l' ultima a morire

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da frankitt
    Purtroppo non capisco perchè se dichiaro str[] funziona, ed invece se lascio *str non funziona.
    Te lo ha spiegato shodan, rileggi quello che ha scritto
    E riguardati le differenze tra char* s = "ciao" e char s[] = "ciao"
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Chiedo scusa a shodan, ma se non ho avevo capito la sua risposta è proprio per la mia ignoranza!!! Domani mi metto a rivedere un pò allora la differenza...certo non avrei mai creduto che...!!!
    Grazie mille, probabilmente vi chiederò altro ancora!

    Non ho firme, ma la ferma speranza che compaia una firma automatica ogni qualvolta ci sia bisogno di una firma, fermo restando che la speranza di una firma è l' ultima a morire

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Scusa di che? Semmai dovresti prendere a martellate il compilatore se non emette nemmeno un warning.

    Una sintassi tipo:

    char *str = "1 2 3 4 5 6 7 8 9 10";

    dichiara sempre un puntatore a una stringa costante, non modificabile. Anche se il char* non ha il const davanti.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Grazie shodan della spiegazione, quindi c'è questo "const" nascosto, che mi fotte.
    A me sinceramente il c mi sembra un pò il mistero della fede, ci sono un sacco di trappole mortali in quel linguaggio.
    Ora a questo punto mi chiedo, ma nessun compilatore lo da come warning? E perchè non lo mettono? Sarò ignorante, però non mi sembra così banale la risposta...

    Grazie a tutti!
    Non ho firme, ma la ferma speranza che compaia una firma automatica ogni qualvolta ci sia bisogno di una firma, fermo restando che la speranza di una firma è l' ultima a morire

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da frankitt
    Ora a questo punto mi chiedo, ma nessun compilatore lo da come warning?
    :master: Prova a compilare usando l'opzione -Wall :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.