Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96

    [c] leggere stringa da tastiera

    ciao a tutti!

    char *s = NULL;
    scanf("%s",s);

    mi aspetto che in s ci sia la stringa digitata ma invece c'e' NULL ....perche'? :master:

    come faccio a leggere una stringa da tastiera?

  2. #2
    Perché scanf non alloca la memoria della stringa al posto tuo, ma si aspetta che sia già stata allocata. Pertanto dovrai fare qualcosa del genere:
    codice:
    char s[80];
    scanf("%79s",s);
    Il 79 è per dire alla scanf di non leggere più di 79 caratteri, dati che in s c'è spazio solo per 79 caratteri più il NUL (terminatore finale).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    e se non so la lunghezza della stringa digitata?

  4. #4
    Generalmente si crea un buffer di dimensioni sufficienti per accogliere la più lunga stringa che possa essere ragionevolmente inserita, anche se un approccio migliore può essere recuperare la stringa "a rate" con la fgets in un buffer dinamico da riallocare di volta in volta, espandendolo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    grazie.....sempre su questo argomento:


    char string[50];
    scanf ("%s",string);

    digito : ciao pluto bello

    in string ho solo "ciao" ed il resto? :master:

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Al posto della scanf utilizza la fgets


    fgets(string, 50, stdin);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    Grazie! per curiosita' che problemi dava la scanf?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Nessun problema ... per la scanf uno spazio è un delimitatore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.