DOMANDA Dubbio File C

saro1995

Nuovo Utente
82
3
Ciao ragazzi come state? Spero tutto bene!
Da un bel pò che programmo in C ma solo adesso mi è sorto un dubbio riguardo i file e i relativi caricamenti su liste ecc... Il mio dubbio è questo: Se per esempio su file ho dati dati caratterizzati da numeri interi o stringhe è giusto se prendo le stringhe composte da più parole con fgets() e gli interi con fscanf()? Ho questo dubbio perchè tempo fa un mio collega mi disse che non è corretto usare fgets e fscanf insieme. Confermate? Se confermate ditemi come dovrei comportarmi in casi come questi, cioè con file composti da stringhe e interi con relativi esempi se è possibile. Grazie
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
fscanf() lascia il new line nel buffer, e se è seguito da fgets() questo leggerebbe il new line.
A parte questo, fgets() è consigliato per la sicurezza: puoi fare controlli sul contenuto, e quindi validarlo (sempre qui verifichi se è un intero o no), inoltre puoi accertarti che non venga causato un buffer overflow.

Ps. Scusa se sono breve, ma sono da smartphone. Appena mi sarà possibile ti mostrerò anche degli esempi, se non sarò anticipato da altri.
Magari, nel caso, vado più "low level".
 
  • Mi piace
Reazioni: _Achille

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Te lo ha detto perché fgets() non salta i newline, li estrae, li inserisce nel buffer e termina la lettura.

Si può notare come da questo esempio, che funziona apparentemente bene, che se si inserisce un newline tra 1.8 e “c’era una volta” la stringa che viene letta non è in alcun modo utile (tralascia l’uso di gets, è perché wandbox non gestisce i file...)
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili