gcc weigert gets( ) ??

Pagina: 1
Acties:

  • Marc
  • Registratie: November 2001
  • Laatst online: 01-12-2021
als ik bijvoorbeeld de volgende code wil compilen met gcc:
code:
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

main()
{
   char str[80];
   
   gets(str);
   puts(str);

   return 0;
}

krijg ik de volgende foutmelding:
code:
1
2
3
4
[user@host coding]$ gcc -g -o file source.c
/tmp/cc8bPokM.o: In function main:
/home/user/coding/source.c: the [b]gets[/b] function is dangerous and should not be used.
[user@host coding]$

ik mag gets() dus niet gebruiken?!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

nee het mag wel
maar is niet veilig :)

Doet iets met Cloud (MS/IBM)


  • [ti]
  • Registratie: Februari 2000
  • Niet online
fgets() gebruiken.

Het probleem is dat gets() gewoon alles inleest en in je buffer gooit. Als er nou bv. 100 tekens ingevoerd zouden worden, belanden er 20 ergens random in het geheugen, en gaat het stuk.

  • Marc
  • Registratie: November 2001
  • Laatst online: 01-12-2021
ok ik gebruik gewoon scanf(), werkt ook :)

  • [ti]
  • Registratie: Februari 2000
  • Niet online
NEEEEEEEEEEEEEEE! scanf() is zowaar nog MEER evil!

Nooit scanf() of gets() gebruiken. fgets() is WEL veilig, scanf heeft hetzelfde probleem als gets().

  • Marc
  • Registratie: November 2001
  • Laatst online: 01-12-2021
argh..waarom geeft gcc dan geen waarschuwing bij scanf()?

  • [ti]
  • Registratie: Februari 2000
  • Niet online
mja, zou ie imho ook wel mogen doen :) scanf is nog wel wat flexibeler, maar 't gaat heel snel fout met scanf(). gewoon fgets() gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main(int argc, char *argv[])
{
   char str[80];
   
   fgets(str, 80, stdin);
   puts(str);

   return 0;
}

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Die functies zouden niet eens meer in de stdlib opgenomen moeten worden naar mijn mening :-)

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

tuurlijk wel.. als je weet wat je doet wel.

  • [ti]
  • Registratie: Februari 2000
  • Niet online
heh. volgens mij gebruik iedereen die weet wat ie doet gets() en scanf() niet.

Kan zo geen voorbeeld verzinnen waarin je echt scanf() nodig zou hebben en dat het echt nut heeft enzo en ook veilig is.
Pagina: 1