Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [c]alternativa a gets

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    [c]alternativa a gets

    nel codice di un programma ho utilizzato la seguente riga:
    codice:
    gets(str);
    per far ricevere in input una stringa

    Quando ho compilato il programma ho ricevuto il seguente avviso:
    codice:
    menu.c:(.text+0x2ff): warning: the `gets' function is dangerous and should not be used.
    C'e' un modo alternativo di prendere una stringa in input diverso da gets?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    fgets con al posto di FILE*, stdin (se non ricordo male)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    non sto usando file per questo

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Va usata così. Come detto sopra, l'ultimo parametro non è un FILE*, ma stdin.
    codice:
    char c[256];
    memset(c,0,256);
    fgets(c,256,stdin);
    printf("%s\n", c);

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    codice:
    fgets(c,256,stdin);
    E' solo questa la riga che mi serve?
    Questo memset infatti non lo trovo sul libro.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    18
    potresti anche farti un ciclo tipo

    codice:
    char str[512];
    int j , ch ;
    
    for( j = 0 ; ( ch = getchar () ) != '\n' ; j++ )
          str [ j ] = ch ;
          str [ j ] = '\0';

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da cristianc
    codice:
    fgets(c,256,stdin);
    E' solo questa la riga che mi serve?
    Questo memset infatti non lo trovo sul libro.
    Si. La memset è dichiarata in string.h e serve solo ad azzerare il buffer.

  8. #8
    La memset non è necessaria, dal momento che la fgets inserisce sempre il terminatore NUL. In ogni caso per azzerare completamente un array basta fare così:
    codice:
    char c[256]={0};
    .
    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.