Can we use strings with scanf?

H. S. Teoh hsteoh at quickfur.ath.cx
Mon Jan 25 19:16:26 UTC 2021


On Mon, Jan 25, 2021 at 06:43:18PM +0000, Rempas via Digitalmars-d-learn wrote:
> On Monday, 25 January 2021 at 18:28:09 UTC, Ferhat Kurtulmuş wrote:
> > On Monday, 25 January 2021 at 17:38:21 UTC, Rempas wrote:
> > > On Monday, 25 January 2021 at 10:33:14 UTC, Mike Parker wrote:
> > > > [...]
> > > 
> > > Thanks! Actually for some reason. It won't accept a char[size]. I
> > > created a heap allocated (with pureFree and pureMalloc) chrar*,
> > > then used fgets() and created an empty string and looped through
> > > the result adding one by one character until the '\n' which is not
> > > included.
> > 
> > char[buffsize] works if buffsize is a compile time constant. Or just
> > char[1024]. İt is a static array, and it's size must be defined at
> > compile time.
> 
> Idk, for my it says that you can't pass dynamic arrays to scanf

Dynamic arrays in D are "fat" pointers, they have a .ptr and .length,
but scanf expects C-style bare pointers, so you have to specify .ptr in
order to pass the pointer to scanf.  Be aware, however, that doing this
means you no longer have D's bounds-checking protection, and scanf may
cause buffer overruns if the user gives bad input.


T

-- 
Being able to learn is a great learning; being able to unlearn is a greater learning.


More information about the Digitalmars-d-learn mailing list